@fundamental-ngx/core 0.46.0-rc.29 → 0.46.0-rc.30

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.
Files changed (29) hide show
  1. package/esm2022/combobox/combobox.component.mjs +1 -1
  2. package/esm2022/list/list.component.mjs +22 -13
  3. package/esm2022/multi-combobox/multi-combobox.component.mjs +1 -1
  4. package/esm2022/multi-input/multi-input.component.mjs +1 -1
  5. package/esm2022/select/select.component.mjs +1 -1
  6. package/esm2022/token/tokenizer.component.mjs +1 -1
  7. package/esm2022/upload-collection/upload-collection.component.mjs +1 -1
  8. package/esm2022/vertical-navigation/vertical-navigation.component.mjs +1 -1
  9. package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
  10. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  11. package/fesm2022/fundamental-ngx-core-list.mjs +64 -55
  12. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  13. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +1 -1
  14. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  15. package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
  16. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  17. package/fesm2022/fundamental-ngx-core-select.mjs +1 -1
  18. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  19. package/fesm2022/fundamental-ngx-core-token.mjs +1 -1
  20. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  21. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +1 -1
  22. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  23. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +1 -1
  24. package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
  25. package/fundamental-ngx-core-v0.46.0-rc.30.tgz +0 -0
  26. package/list/list.component.d.ts +15 -6
  27. package/package.json +3 -3
  28. package/schematics/add-dependencies/index.js +4 -4
  29. package/fundamental-ngx-core-v0.46.0-rc.29.tgz +0 -0
@@ -512,7 +512,7 @@ export class ComboboxComponent {
512
512
  provide: FD_COMBOBOX_COMPONENT,
513
513
  useExisting: ComboboxComponent
514
514
  }
515
- ], queries: [{ propertyName: "listMessages", predicate: FD_LIST_MESSAGE_DIRECTIVE }], viewQueries: [{ propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "popoverComponent", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "inputGroup", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"mobile ? mobileTemplate : desktopTemplate\"></ng-container>\n\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n [class.fd-combobox-full-width]=\"isSearch\"\n [isOpen]=\"open && displayedValues && displayedValues.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [scrollStrategy]=\"_repositionScrollStrategy\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readOnly\"\n [maxWidth]=\"640\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"!displayedValues.length\">\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 let-term=\"term\" #itemSource>\n <span\n fd-list-title\n *ngIf=\"!itemTemplate\"\n [innerHTML]=\"term | displayFnPipe : displayFn | highlight : inputText : highlighting && filterHighlight\"\n >\n </span>\n <ng-container *ngIf=\"itemTemplate\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: term }\"></ng-container>\n </ng-container>\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-input-group\n [button]=\"showDropdownButton\"\n [glyph]=\"showDropdownButton ? glyphValue : null\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [isControl]=\"true\"\n [isExpanded]=\"!mobile && open && displayedValues.length > 0\"\n [showFocus]=\"!clearInputBtnFocused\"\n [glyphAriaLabel]=\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n (click)=\"mobile && isOpenChangeHandle(true)\"\n >\n <input\n #searchInputElement\n fdkAutoComplete\n fd-input-group-input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"comboboxId + '-list-results'\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? comboboxId + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-expanded]=\"!mobile && open && displayedValues.length\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"readOnly || disabled ? -1 : null\"\n [enable]=\"autoComplete && !mobile\"\n [displayFn]=\"displayFn\"\n [options]=\"dropdownValues\"\n [inputText]=\"inputText\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [attr.aria-readonly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [id]=\"inputId\"\n [(ngModel)]=\"inputText\"\n (onComplete)=\"handleAutoComplete($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n (ngModelChange)=\"handleSearchTermChange()\"\n (blur)=\"handleBlur()\"\n />\n <span\n class=\"fd-input-group__addon fd-input-group__addon--button\"\n [class.fd-shellbar__input-group-addon]=\"inShellbar\"\n *ngIf=\"isSearch && showClearButton && inputText && inputText.length > 0\"\n >\n <button\n fd-button\n class=\"fd-input-group__button\"\n type=\"button\"\n [fdType]=\"inShellbar ? 'standard' : 'transparent'\"\n title=\"Clear input\"\n [class.fd-shellbar__button]=\"inShellbar\"\n [attr.tabindex]=\"clearButtonFocusable ? 0 : -1\"\n (focus)=\"clearInputBtnFocus()\"\n (blur)=\"clearInputBtnBlur()\"\n (click)=\"_handleClearSearchTerm()\"\n >\n <fd-icon glyph=\"decline\"></fd-icon>\n </button>\n </span>\n </fd-input-group>\n <div [id]=\"comboboxId + '-list-results'\" class=\"fd-combobox-count-list-results\">\n {{ displayedValues.length || 0 }} result list items\n </div>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n class=\"fd-combobox-custom-list\"\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result'\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n <ng-content></ng-content>\n <ng-container *ngIf=\"groupFn\">\n <ng-container *ngFor=\"let group of displayedValues | listGroupPipe : groupFn\">\n <li role=\"group\" fd-list-group-header [tabindex]=\"0\">\n <span fd-list-title>{{ group.key }}</span>\n </li>\n <li\n role=\"option\"\n fd-list-item\n [attr.aria-placeholder]=\"group.key\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n *ngFor=\"let term of group.value\"\n [selected]=\"isSelected(term)\"\n (keyDown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!groupFn\">\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n *ngFor=\"let term of displayedValues\"\n [selected]=\"isSelected(term)\"\n (keyDown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-container [ngTemplateOutlet]=\"itemSource\" [ngTemplateOutletContext]=\"{ term: term }\"></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n", styles: [".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i5.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i8.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i8.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i9.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator"], outputs: ["focusEscapeList"] }, { kind: "component", type: i9.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline"], outputs: ["keyDown"] }, { kind: "directive", type: i9.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i9.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "component", type: i10.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "directive", type: i2.AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "displayFn"], outputs: ["onComplete"] }, { kind: "pipe", type: i2.DisplayFnPipe, name: "displayFnPipe" }, { kind: "pipe", type: i2.SearchHighlightPipe, name: "highlight" }, { kind: "pipe", type: i11.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i12.ListGroupPipe, name: "listGroupPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
515
+ ], queries: [{ propertyName: "listMessages", predicate: FD_LIST_MESSAGE_DIRECTIVE }], viewQueries: [{ propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true }, { propertyName: "popoverComponent", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "inputGroup", first: true, predicate: InputGroupComponent, descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["controlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"mobile ? mobileTemplate : desktopTemplate\"></ng-container>\n\n<ng-template #desktopTemplate>\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n [class.fd-combobox-full-width]=\"isSearch\"\n [isOpen]=\"open && displayedValues && displayedValues.length > 0\"\n (isOpenChange)=\"isOpenChangeHandle($event)\"\n [fillControlMode]=\"fillControlMode\"\n [scrollStrategy]=\"_repositionScrollStrategy\"\n [focusTrapped]=\"true\"\n [triggers]=\"triggers\"\n [disabled]=\"disabled || readOnly\"\n [maxWidth]=\"640\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n >\n <fd-popover-control>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </fd-popover-control>\n <fd-popover-body [hidden]=\"!displayedValues.length\">\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 let-term=\"term\" #itemSource>\n <span\n fd-list-title\n *ngIf=\"!itemTemplate\"\n [innerHTML]=\"term | displayFnPipe : displayFn | highlight : inputText : highlighting && filterHighlight\"\n >\n </span>\n <ng-container *ngIf=\"itemTemplate\">\n <ng-container [ngTemplateOutlet]=\"itemTemplate\" [ngTemplateOutletContext]=\"{ $implicit: term }\"></ng-container>\n </ng-container>\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-input-group\n [button]=\"showDropdownButton\"\n [glyph]=\"showDropdownButton ? glyphValue : null\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [isControl]=\"true\"\n [isExpanded]=\"!mobile && open && displayedValues.length > 0\"\n [showFocus]=\"!clearInputBtnFocused\"\n [glyphAriaLabel]=\"ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"title || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"onPrimaryButtonClick()\"\n (click)=\"mobile && isOpenChangeHandle(true)\"\n >\n <input\n #searchInputElement\n fdkAutoComplete\n fd-input-group-input\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.aria-describedby]=\"comboboxId + '-list-results'\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? comboboxId + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n [attr.aria-expanded]=\"!mobile && open && displayedValues.length\"\n [attr.aria-required]=\"required\"\n [attr.tabindex]=\"readOnly || disabled ? -1 : null\"\n [enable]=\"autoComplete && !mobile\"\n [displayFn]=\"displayFn\"\n [options]=\"dropdownValues\"\n [inputText]=\"inputText\"\n [disabled]=\"disabled\"\n [readonly]=\"readOnly\"\n [attr.aria-readonly]=\"readOnly\"\n [placeholder]=\"placeholder\"\n [id]=\"inputId\"\n [(ngModel)]=\"inputText\"\n (onComplete)=\"handleAutoComplete($event)\"\n (keydown)=\"onInputKeydownHandler($event)\"\n (ngModelChange)=\"handleSearchTermChange()\"\n (blur)=\"handleBlur()\"\n />\n <span\n class=\"fd-input-group__addon fd-input-group__addon--button\"\n [class.fd-shellbar__input-group-addon]=\"inShellbar\"\n *ngIf=\"isSearch && showClearButton && inputText && inputText.length > 0\"\n >\n <button\n fd-button\n class=\"fd-input-group__button\"\n type=\"button\"\n [fdType]=\"inShellbar ? 'standard' : 'transparent'\"\n title=\"Clear input\"\n [class.fd-shellbar__button]=\"inShellbar\"\n [attr.tabindex]=\"clearButtonFocusable ? 0 : -1\"\n (focus)=\"clearInputBtnFocus()\"\n (blur)=\"clearInputBtnBlur()\"\n (click)=\"_handleClearSearchTerm()\"\n >\n <fd-icon glyph=\"decline\"></fd-icon>\n </button>\n </span>\n </fd-input-group>\n <div [id]=\"comboboxId + '-list-results'\" class=\"fd-combobox-count-list-results\">\n {{ displayedValues.length || 0 }} result list items\n </div>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n class=\"fd-combobox-custom-list\"\n [dropdownMode]=\"true\"\n [id]=\"comboboxId + '-result'\"\n role=\"listbox\"\n [attr.aria-labelledby]=\"comboboxId + '-search'\"\n [style.maxHeight]=\"!mobile && maxHeight\"\n [hasMessage]=\"listMessages && listMessages.length > 0\"\n [byline]=\"byline\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n >\n <ng-content></ng-content>\n <ng-container *ngIf=\"groupFn\">\n <ng-container *ngFor=\"let group of displayedValues | listGroupPipe : groupFn\">\n <li role=\"group\" fd-list-group-header [tabindex]=\"0\">\n <span fd-list-title>{{ group.key }}</span>\n </li>\n <li\n role=\"option\"\n fd-list-item\n [attr.aria-placeholder]=\"group.key\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n *ngFor=\"let term of group.value\"\n [selected]=\"isSelected(term)\"\n (keyDown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-container\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ term: term }\"\n ></ng-container>\n </li>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!groupFn\">\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n class=\"fd-combobox-list-item\"\n *ngFor=\"let term of displayedValues\"\n [selected]=\"isSelected(term)\"\n (keyDown)=\"onItemKeyDownHandler($event, term)\"\n (click)=\"onMenuClickHandler(term)\"\n >\n <ng-container [ngTemplateOutlet]=\"itemSource\" [ngTemplateOutletContext]=\"{ term: term }\"></ng-container>\n </li>\n </ng-container>\n </ul>\n</ng-template>\n", styles: [".fd-combobox-custom-class,.fd-combobox-custom-class .fd-combobox-shellbar-custom{display:inline-block}.fd-list__item.fd-combobox-list-item{cursor:pointer}.fd-combobox-full-width{width:100%}.fd-combobox-count-list-results{position:absolute;opacity:0;z-index:-1}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i5.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i8.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i8.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i9.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i9.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline"], outputs: ["keyDown"] }, { kind: "directive", type: i9.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i9.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "component", type: i10.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "directive", type: i2.AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "displayFn"], outputs: ["onComplete"] }, { kind: "pipe", type: i2.DisplayFnPipe, name: "displayFnPipe" }, { kind: "pipe", type: i2.SearchHighlightPipe, name: "highlight" }, { kind: "pipe", type: i11.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i12.ListGroupPipe, name: "listGroupPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
516
516
  }
517
517
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: ComboboxComponent, decorators: [{
518
518
  type: Component,
@@ -1,12 +1,12 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, HostBinding, HostListener, Input, Output, QueryList, ViewEncapsulation } from '@angular/core';
2
- import { ListItemComponent } from './list-item/list-item.component';
3
- import { merge, Subject } from 'rxjs';
4
- import { map, startWith, takeUntil } from 'rxjs/operators';
5
2
  import { KeyboardSupportService, LIST_ITEM_COMPONENT } from '@fundamental-ngx/cdk/utils';
3
+ import { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
4
+ import { Subject, merge } from 'rxjs';
5
+ import { map, startWith, takeUntil } from 'rxjs/operators';
6
6
  import { ListGroupHeaderDirective } from './directives/list-group-header.directive';
7
7
  import { ListFocusItem } from './list-focus-item.model';
8
+ import { ListItemComponent } from './list-item/list-item.component';
8
9
  import { ListNavigationItemComponent } from './list-navigation-item/list-navigation-item.component';
9
- import { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
10
10
  import { FD_LIST_COMPONENT, FD_LIST_UNREAD_INDICATOR } from './tokens';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "@fundamental-ngx/cdk/utils";
@@ -16,6 +16,10 @@ import * as i2 from "@fundamental-ngx/core/content-density";
16
16
  * It is used to display a list of items with simple information such as scopes, names, etc.
17
17
  */
18
18
  export class ListComponent {
19
+ /** @hidden */
20
+ get _ariaRole() {
21
+ return this.role || this._defaultRole;
22
+ }
19
23
  /** @hidden */
20
24
  constructor(_keyboardSupportService, _cdr, _contentDensityObserver) {
21
25
  this._keyboardSupportService = _keyboardSupportService;
@@ -45,8 +49,11 @@ export class ListComponent {
45
49
  this.focusEscapeList = new EventEmitter();
46
50
  /** Whether list component includes links */
47
51
  this.hasNavigation = false;
48
- /** @hidden */
49
- this._role = 'list'; // default role for lists
52
+ /**
53
+ * @hidden
54
+ * Default role for lists
55
+ */
56
+ this._defaultRole = 'list';
50
57
  /** An RxJS Subject that will kill the data stream upon queryList changes (for unsubscribing) */
51
58
  this._onRefresh$ = new Subject();
52
59
  /** An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing) */
@@ -125,10 +132,10 @@ export class ListComponent {
125
132
  const items = this.items.filter((item) => item.link);
126
133
  this.hasNavigation = items.length > 0;
127
134
  if (!this.selection) {
128
- this._role = this.hasNavigation ? 'navigation' : 'list';
135
+ this._defaultRole = this.hasNavigation ? 'navigation' : 'list';
129
136
  }
130
137
  else {
131
- this._role = 'listbox';
138
+ this._defaultRole = 'listbox';
132
139
  }
133
140
  }
134
141
  /** @hidden */
@@ -138,7 +145,7 @@ export class ListComponent {
138
145
  .subscribe((direction) => this.focusEscapeList.emit(direction));
139
146
  }
140
147
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: ListComponent, deps: [{ token: i1.KeyboardSupportService }, { token: i0.ChangeDetectorRef }, { token: i2.ContentDensityObserver }], target: i0.ɵɵFactoryTarget.Component }); }
141
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: ListComponent, selector: "[fd-list], [fdList]", inputs: { dropdownMode: "dropdownMode", multiInputMode: "multiInputMode", mobileMode: "mobileMode", hasMessage: "hasMessage", noBorder: "noBorder", navigationIndicator: "navigationIndicator", selection: "selection", keyboardSupport: "keyboardSupport", byline: "byline", unreadIndicator: "unreadIndicator" }, outputs: { focusEscapeList: "focusEscapeList" }, host: { listeners: { "keydown": "keyDownHandler($event)" }, properties: { "class.fd-list--dropdown": "this.dropdownMode", "class.fd-list--multi-input": "this.multiInputMode", "class.fd-list--mobile": "this.mobileMode", "class.fd-list--has-message": "this.hasMessage", "class.fd-list--no-border": "this.noBorder", "class.fd-list--navigation-indication": "this.navigationIndicator", "class.fd-list--selection": "this.selection", "class.fd-list--byline": "this.byline", "class.fd-list--unread-indicator": "this.unreadIndicator", "class.fd-list--navigation": "this.hasNavigation", "attr.role": "this._role" }, classAttribute: "fd-list" }, providers: [
148
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: ListComponent, selector: "[fd-list], [fdList]", inputs: { dropdownMode: "dropdownMode", multiInputMode: "multiInputMode", mobileMode: "mobileMode", hasMessage: "hasMessage", noBorder: "noBorder", navigationIndicator: "navigationIndicator", selection: "selection", keyboardSupport: "keyboardSupport", byline: "byline", unreadIndicator: "unreadIndicator", role: "role" }, outputs: { focusEscapeList: "focusEscapeList" }, host: { listeners: { "keydown": "keyDownHandler($event)" }, properties: { "class.fd-list--dropdown": "this.dropdownMode", "class.fd-list--multi-input": "this.multiInputMode", "class.fd-list--mobile": "this.mobileMode", "class.fd-list--has-message": "this.hasMessage", "class.fd-list--no-border": "this.noBorder", "class.fd-list--navigation-indication": "this.navigationIndicator", "class.fd-list--selection": "this.selection", "class.fd-list--byline": "this.byline", "class.fd-list--unread-indicator": "this.unreadIndicator", "class.fd-list--navigation": "this.hasNavigation", "attr.role": "this._ariaRole" }, classAttribute: "fd-list" }, providers: [
142
149
  KeyboardSupportService,
143
150
  contentDensityObserverProviders(),
144
151
  {
@@ -219,9 +226,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
219
226
  }], hasNavigation: [{
220
227
  type: HostBinding,
221
228
  args: ['class.fd-list--navigation']
222
- }], _role: [{
223
- type: HostBinding,
224
- args: ['attr.role']
229
+ }], role: [{
230
+ type: Input
225
231
  }], items: [{
226
232
  type: ContentChildren,
227
233
  args: [LIST_ITEM_COMPONENT]
@@ -231,8 +237,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
231
237
  }], _focusItems: [{
232
238
  type: ContentChildren,
233
239
  args: [ListFocusItem]
240
+ }], _ariaRole: [{
241
+ type: HostBinding,
242
+ args: ['attr.role']
234
243
  }], keyDownHandler: [{
235
244
  type: HostListener,
236
245
  args: ['keydown', ['$event']]
237
246
  }] } });
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFFSCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBRXRCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWhILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7OztBQUd2RTs7O0dBR0c7QUF3QkgsTUFBTSxPQUFPLGFBQWE7SUFnRnRCLGNBQWM7SUFDZCxZQUNZLHVCQUE4RCxFQUM5RCxJQUF1QixF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LE1BQU07Z0JBS1AsYUFBYTtzQkFEWixXQUFXO3VCQUFDLDJCQUEyQjtnQkFLeEMsS0FBSztzQkFESixXQUFXO3VCQUFDLFdBQVc7Z0JBS3hCLEtBQUs7c0JBREosZUFBZTt1QkFBQyxtQkFBbUI7Z0JBS3BDLFNBQVM7c0JBRFIsZUFBZTt1QkFBQywyQkFBMkI7Z0JBS3BDLFdBQVc7c0JBRGxCLGVBQWU7dUJBQUMsYUFBYTtnQkFxQzlCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gICAgRm9jdXNFc2NhcGVEaXJlY3Rpb24sXG4gICAgS2V5Ym9hcmRTdXBwb3J0U2VydmljZSxcbiAgICBMSVNUX0lURU1fQ09NUE9ORU5ULFxuICAgIExpc3RJdGVtSW50ZXJmYWNlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IExpc3RHcm91cEhlYWRlckRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9saXN0LWdyb3VwLWhlYWRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTGlzdEZvY3VzSXRlbSB9IGZyb20gJy4vbGlzdC1mb2N1cy1pdGVtLm1vZGVsJztcbmltcG9ydCB7IExpc3ROYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbGlzdC1uYXZpZ2F0aW9uLWl0ZW0vbGlzdC1uYXZpZ2F0aW9uLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IExpc3RDb21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuL2xpc3QtY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGRF9MSVNUX0NPTVBPTkVOVCwgRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SIH0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHsgTGlzdFVucmVhZEluZGljYXRvciB9IGZyb20gJy4vbGlzdC11bnJlYWQtaW5kaWNhdG9yLmludGVyZmFjZSc7XG5cbi8qKlxuICogVGhlIGRpcmVjdGl2ZSB0aGF0IHJlcHJlc2VudHMgYSBsaXN0LlxuICogSXQgaXMgdXNlZCB0byBkaXNwbGF5IGEgbGlzdCBvZiBpdGVtcyB3aXRoIHNpbXBsZSBpbmZvcm1hdGlvbiBzdWNoIGFzIHNjb3BlcywgbmFtZXMsIGV0Yy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tmZC1saXN0XSwgW2ZkTGlzdF0nLFxuICAgIHRlbXBsYXRlVXJsOiBgLi9saXN0LmNvbXBvbmVudC5odG1sYCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtbGlzdCdcbiAgICB9LFxuICAgIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnLCAnLi4vLi4vLi4vLi4vY2RrL3NyYy9saWIvdXRpbHMvZHJhZy1hbmQtZHJvcC9kcmFnLWFuZC1kcm9wLnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBLZXlib2FyZFN1cHBvcnRTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCksXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0xJU1RfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIExpc3RDb21wb25lbnRJbnRlcmZhY2UsIExpc3RVbnJlYWRJbmRpY2F0b3IsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogV2hldGhlciBkcm9wZG93biBtb2RlIGlzIGluY2x1ZGVkIHRvIGNvbXBvbmVudCwgdXNlZCBmb3IgU2VsZWN0IGFuZCBDb21ib2JveCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1kcm9wZG93bicpXG4gICAgZHJvcGRvd25Nb2RlID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBtdWx0aSBtb2RlIGlzIGluY2x1ZGVkIHRvIGNvbXBvbmVudCwgdXNlZCBmb3IgTXVsdGlJbnB1dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1tdWx0aS1pbnB1dCcpXG4gICAgbXVsdGlJbnB1dE1vZGUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgaXMgdXNlZCBpbiBtb2JpbGUgbW9kZSovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLWxpc3QtLW1vYmlsZScpXG4gICAgbW9iaWxlTW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgY29udGFpbnMgbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1oYXMtbWVzc2FnZScpXG4gICAgaGFzTWVzc2FnZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIHJlbW92ZWQgYm9yZGVycyAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1uby1ib3JkZXInKVxuICAgIG5vQm9yZGVyID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGNvbXBvbmVudCBoYXMgbmF2aWdhdGlvbiBpbmRpY2F0b3JzICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLWxpc3QtLW5hdmlnYXRpb24taW5kaWNhdGlvbicpXG4gICAgbmF2aWdhdGlvbkluZGljYXRvciA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIGNoZWNrYm94ZXMgb3IgcmFkaW8gYnV0dG9ucyBpbmNsdWRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1zZWxlY3Rpb24nKVxuICAgIHNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgaW50ZXJuYWwga2V5Ym9hcmQgc3VwcG9ydCBzaG91bGQgYmUgZW5hYmxlZC4gSXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGtleWJvYXJkU3VwcG9ydCA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IHNob3VsZCBoYXZlIGEgYnlsaW5lICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLWxpc3QtLWJ5bGluZScpXG4gICAgYnlsaW5lID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHVucmVhZCBub3RpZmljYXRpb24gaW5kaWNhdG9yLiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtbGlzdC0tdW5yZWFkLWluZGljYXRvcicpXG4gICAgQElucHV0KClcbiAgICB1bnJlYWRJbmRpY2F0b3IgPSBmYWxzZTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gZm9jdXMgZXNjYXBlcyB0aGUgbGlzdCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvY3VzRXNjYXBlTGlzdCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFc2NhcGVEaXJlY3Rpb24+KCk7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGNvbXBvbmVudCBpbmNsdWRlcyBsaW5rcyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtbGlzdC0tbmF2aWdhdGlvbicpXG4gICAgaGFzTmF2aWdhdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgX3JvbGUgPSAnbGlzdCc7IC8vIGRlZmF1bHQgcm9sZSBmb3IgbGlzdHNcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihMSVNUX0lURU1fQ09NUE9ORU5UKVxuICAgIGl0ZW1zOiBRdWVyeUxpc3Q8TGlzdEl0ZW1JbnRlcmZhY2U+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKExpc3ROYXZpZ2F0aW9uSXRlbUNvbXBvbmVudClcbiAgICBfbmF2SXRlbXM6IFF1ZXJ5TGlzdDxMaXN0TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKExpc3RGb2N1c0l0ZW0pXG4gICAgcHJpdmF0ZSBfZm9jdXNJdGVtczogUXVlcnlMaXN0PExpc3RGb2N1c0l0ZW0+O1xuXG4gICAgLyoqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBxdWVyeUxpc3QgY2hhbmdlcyAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uUmVmcmVzaCQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZykgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9rZXlib2FyZFN1cHBvcnRTZXJ2aWNlOiBLZXlib2FyZFN1cHBvcnRTZXJ2aWNlPExpc3RGb2N1c0l0ZW0+LFxuICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9jb250ZW50RGVuc2l0eU9ic2VydmVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgKSB7XG4gICAgICAgIF9jb250ZW50RGVuc2l0eU9ic2VydmVyLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uTGlzdEZvY3VzRXNjYXBlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkU3VwcG9ydFNlcnZpY2Uuc2V0S2V5Ym9hcmRTZXJ2aWNlKHRoaXMuX2ZvY3VzSXRlbXMsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uUXVlcnlDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAga2V5RG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdXBwb3J0KSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlib2FyZFN1cHBvcnRTZXJ2aWNlLm9uS2V5RG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogU2V0IGZha2UgZm9jdXMgb24gZWxlbWVudCB3aXRoIHBhc3NlZCBpbmRleCAqL1xuICAgIHNldEl0ZW1BY3RpdmUoaW5kZXg6IG51bWJlciwgdXBkYXRlT25seSA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICh1cGRhdGVPbmx5KSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlib2FyZFN1cHBvcnRTZXJ2aWNlLmtleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShpbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlib2FyZFN1cHBvcnRTZXJ2aWNlLmtleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uUXVlcnlDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2ZvY3VzSXRlbXMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aCgwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVjaGVja0xpbmtzKCk7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5Pbkl0ZW1zQ2xpY2soKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHVzaW5nIHNldFRpbWVvdXQgdG8gYXZvaWQgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbXNQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Pbkl0ZW1zQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIC8qKiBGaW5pc2ggYWxsIHRoZSBzdHJlYW1zLCBmcm9tIGJlZm9yZSAqL1xuICAgICAgICB0aGlzLl9vblJlZnJlc2gkLm5leHQoKTtcblxuICAgICAgICBpZiAoIXRoaXMua2V5Ym9hcmRTdXBwb3J0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvKiogTWVyZ2UgcmVmcmVzaC9kZXN0cm95IG9ic2VydmFibGVzICovXG4gICAgICAgIGNvbnN0IGNvbXBsZXRpb24kID0gbWVyZ2UodGhpcy5fb25SZWZyZXNoJCwgdGhpcy5fb25EZXN0cm95JCk7XG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uQ2hhbmdlc0luZGV4ZXM6IE9ic2VydmFibGU8eyBpbmRleDogbnVtYmVyOyB1cGRhdGVPbmx5OiBib29sZWFuIH0+W10gPSB0aGlzLl9mb2N1c0l0ZW1zLm1hcChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT5cbiAgICAgICAgICAgICAgICBtZXJnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5fY2xpY2tlZCQucGlwZShtYXAoKCkgPT4gKHsgaW5kZXgsIHVwZGF0ZU9ubHk6IGZhbHNlIH0pKSksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uX2ZvY3VzZWQkLnBpcGUobWFwKCh7IGZvY3VzZWRXaXRoaW4gfSkgPT4gKHsgaW5kZXgsIHVwZGF0ZU9ubHk6IGZvY3VzZWRXaXRoaW4gfSkpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgbWVyZ2UoLi4uaW50ZXJhY3Rpb25DaGFuZ2VzSW5kZXhlcylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbChjb21wbGV0aW9uJCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGluZGV4LCB1cGRhdGVPbmx5IH0pID0+IHRoaXMuc2V0SXRlbUFjdGl2ZShpbmRleCwgdXBkYXRlT25seSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSB1cGRhdGVJdGVtc1Byb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGxldCBjbG9zZXN0TGlzdEhlYWRlcjogTGlzdEdyb3VwSGVhZGVyRGlyZWN0aXZlIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIHRoaXMuX2ZvY3VzSXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGlzdEdyb3VwSGVhZGVyRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgY2xvc2VzdExpc3RIZWFkZXIgPSBpdGVtO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtIGluc3RhbmNlb2YgTGlzdEl0ZW1Db21wb25lbnQgJiYgY2xvc2VzdExpc3RIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLl9yZWxhdGVkR3JvdXBIZWFkZXJJZCA9IGNsb3Nlc3RMaXN0SGVhZGVyLm5hdGl2ZUVsZW1lbnRJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uc2V0SXNGaXJzdChpbmRleCA9PT0gMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVjaGVja0xpbmtzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmxpbmspO1xuICAgICAgICB0aGlzLmhhc05hdmlnYXRpb24gPSBpdGVtcy5sZW5ndGggPiAwO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9yb2xlID0gdGhpcy5oYXNOYXZpZ2F0aW9uID8gJ25hdmlnYXRpb24nIDogJ2xpc3QnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcm9sZSA9ICdsaXN0Ym94JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25MaXN0Rm9jdXNFc2NhcGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkU3VwcG9ydFNlcnZpY2UuZm9jdXNFc2NhcGVMaXN0XG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkaXJlY3Rpb24pID0+IHRoaXMuZm9jdXNFc2NhcGVMaXN0LmVtaXQoZGlyZWN0aW9uKSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFSCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBR3RCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFcEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRXBHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFVBQVUsQ0FBQzs7OztBQUV2RTs7O0dBR0c7QUF3QkgsTUFBTSxPQUFPLGFBQWE7SUE0RXRCLGNBQWM7SUFDZCxJQUNZLFNBQVM7UUFDakIsT0FBTyxJQUFJ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O3VCQUFDLHVCQUF1QjtnQkFNcEMsZUFBZTtzQkFGZCxXQUFXO3VCQUFDLGlDQUFpQzs7c0JBQzdDLEtBQUs7Z0JBS04sZUFBZTtzQkFEZCxNQUFNO2dCQUtQLGFBQWE7c0JBRFosV0FBVzt1QkFBQywyQkFBMkI7Z0JBT3hDLElBQUk7c0JBREgsS0FBSztnQkFLTixLQUFLO3NCQURKLGVBQWU7dUJBQUMsbUJBQW1CO2dCQUtwQyxTQUFTO3NCQURSLGVBQWU7dUJBQUMsMkJBQTJCO2dCQUtwQyxXQUFXO3NCQURsQixlQUFlO3VCQUFDLGFBQWE7Z0JBS2xCLFNBQVM7c0JBRHBCLFdBQVc7dUJBQUMsV0FBVztnQkE2Q3hCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgRm9jdXNFc2NhcGVEaXJlY3Rpb24sXG4gICAgS2V5Ym9hcmRTdXBwb3J0U2VydmljZSxcbiAgICBMSVNUX0lURU1fQ09NUE9ORU5ULFxuICAgIExpc3RJdGVtSW50ZXJmYWNlLFxuICAgIE51bGxhYmxlXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTGlzdEdyb3VwSGVhZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xpc3QtZ3JvdXAtaGVhZGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMaXN0Q29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9saXN0LWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlzdEZvY3VzSXRlbSB9IGZyb20gJy4vbGlzdC1mb2N1cy1pdGVtLm1vZGVsJztcbmltcG9ydCB7IExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2xpc3QtbmF2aWdhdGlvbi1pdGVtL2xpc3QtbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaXN0VW5yZWFkSW5kaWNhdG9yIH0gZnJvbSAnLi9saXN0LXVucmVhZC1pbmRpY2F0b3IuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZEX0xJU1RfQ09NUE9ORU5ULCBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IgfSBmcm9tICcuL3Rva2Vucyc7XG5cbi8qKlxuICogVGhlIGRpcmVjdGl2ZSB0aGF0IHJlcHJlc2VudHMgYSBsaXN0LlxuICogSXQgaXMgdXNlZCB0byBkaXNwbGF5IGEgbGlzdCBvZiBpdGVtcyB3aXRoIHNpbXBsZSBpbmZvcm1hdGlvbiBzdWNoIGFzIHNjb3BlcywgbmFtZXMsIGV0Yy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ1tmZC1saXN0XSwgW2ZkTGlzdF0nLFxuICAgIHRlbXBsYXRlVXJsOiBgLi9saXN0LmNvbXBvbmVudC5odG1sYCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtbGlzdCdcbiAgICB9LFxuICAgIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnLCAnLi4vLi4vLi4vLi4vY2RrL3NyYy9saWIvdXRpbHMvZHJhZy1hbmQtZHJvcC9kcmFnLWFuZC1kcm9wLnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBLZXlib2FyZFN1cHBvcnRTZXJ2aWNlLFxuICAgICAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzKCksXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0xJU1RfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIExpc3RDb21wb25lbnRJbnRlcmZhY2UsIExpc3RVbnJlYWRJbmRpY2F0b3IsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogV2hldGhlciBkcm9wZG93biBtb2RlIGlzIGluY2x1ZGVkIHRvIGNvbXBvbmVudCwgdXNlZCBmb3IgU2VsZWN0IGFuZCBDb21ib2JveCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1kcm9wZG93bicpXG4gICAgZHJvcGRvd25Nb2RlID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBtdWx0aSBtb2RlIGlzIGluY2x1ZGVkIHRvIGNvbXBvbmVudCwgdXNlZCBmb3IgTXVsdGlJbnB1dCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1tdWx0aS1pbnB1dCcpXG4gICAgbXVsdGlJbnB1dE1vZGUgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgaXMgdXNlZCBpbiBtb2JpbGUgbW9kZSovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLWxpc3QtLW1vYmlsZScpXG4gICAgbW9iaWxlTW9kZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgY29udGFpbnMgbWVzc2FnZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1oYXMtbWVzc2FnZScpXG4gICAgaGFzTWVzc2FnZSA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIHJlbW92ZWQgYm9yZGVycyAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1uby1ib3JkZXInKVxuICAgIG5vQm9yZGVyID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGNvbXBvbmVudCBoYXMgbmF2aWdhdGlvbiBpbmRpY2F0b3JzICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLWxpc3QtLW5hdmlnYXRpb24taW5kaWNhdGlvbicpXG4gICAgbmF2aWdhdGlvbkluZGljYXRvciA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIGNoZWNrYm94ZXMgb3IgcmFkaW8gYnV0dG9ucyBpbmNsdWRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mZC1saXN0LS1zZWxlY3Rpb24nKVxuICAgIHNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgaW50ZXJuYWwga2V5Ym9hcmQgc3VwcG9ydCBzaG91bGQgYmUgZW5hYmxlZC4gSXQncyBlbmFibGVkIGJ5IGRlZmF1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGtleWJvYXJkU3VwcG9ydCA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IHNob3VsZCBoYXZlIGEgYnlsaW5lICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZkLWxpc3QtLWJ5bGluZScpXG4gICAgYnlsaW5lID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHVucmVhZCBub3RpZmljYXRpb24gaW5kaWNhdG9yLiAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtbGlzdC0tdW5yZWFkLWluZGljYXRvcicpXG4gICAgQElucHV0KClcbiAgICB1bnJlYWRJbmRpY2F0b3IgPSBmYWxzZTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gZm9jdXMgZXNjYXBlcyB0aGUgbGlzdCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvY3VzRXNjYXBlTGlzdCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFc2NhcGVEaXJlY3Rpb24+KCk7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGNvbXBvbmVudCBpbmNsdWRlcyBsaW5rcyAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZmQtbGlzdC0tbmF2aWdhdGlvbicpXG4gICAgaGFzTmF2aWdhdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVXNlci1wcm92aWRlZCByb2xlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm9sZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihMSVNUX0lURU1fQ09NUE9ORU5UKVxuICAgIGl0ZW1zOiBRdWVyeUxpc3Q8TGlzdEl0ZW1JbnRlcmZhY2U+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKExpc3ROYXZpZ2F0aW9uSXRlbUNvbXBvbmVudClcbiAgICBfbmF2SXRlbXM6IFF1ZXJ5TGlzdDxMaXN0TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKExpc3RGb2N1c0l0ZW0pXG4gICAgcHJpdmF0ZSBfZm9jdXNJdGVtczogUXVlcnlMaXN0PExpc3RGb2N1c0l0ZW0+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gICAgcHJpdmF0ZSBnZXQgX2FyaWFSb2xlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvbGUgfHwgdGhpcy5fZGVmYXVsdFJvbGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIERlZmF1bHQgcm9sZSBmb3IgbGlzdHNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0Um9sZSA9ICdsaXN0JztcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gcXVlcnlMaXN0IGNoYW5nZXMgKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vblJlZnJlc2gkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfa2V5Ym9hcmRTdXBwb3J0U2VydmljZTogS2V5Ym9hcmRTdXBwb3J0U2VydmljZTxMaXN0Rm9jdXNJdGVtPixcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICkge1xuICAgICAgICBfY29udGVudERlbnNpdHlPYnNlcnZlci5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5Pbkxpc3RGb2N1c0VzY2FwZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlib2FyZFN1cHBvcnRTZXJ2aWNlLnNldEtleWJvYXJkU2VydmljZSh0aGlzLl9mb2N1c0l0ZW1zLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLl9saXN0ZW5PblF1ZXJ5Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGtleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3VwcG9ydCkge1xuICAgICAgICAgICAgdGhpcy5fa2V5Ym9hcmRTdXBwb3J0U2VydmljZS5vbktleURvd24oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNldCBmYWtlIGZvY3VzIG9uIGVsZW1lbnQgd2l0aCBwYXNzZWQgaW5kZXggKi9cbiAgICBzZXRJdGVtQWN0aXZlKGluZGV4OiBudW1iZXIsIHVwZGF0ZU9ubHkgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAodXBkYXRlT25seSkge1xuICAgICAgICAgICAgdGhpcy5fa2V5Ym9hcmRTdXBwb3J0U2VydmljZS5rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fa2V5Ym9hcmRTdXBwb3J0U2VydmljZS5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5PblF1ZXJ5Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9mb2N1c0l0ZW1zLmNoYW5nZXMucGlwZShzdGFydFdpdGgoMCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3JlY2hlY2tMaW5rcygpO1xuICAgICAgICAgICAgdGhpcy5fbGlzdGVuT25JdGVtc0NsaWNrKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyB1c2luZyBzZXRUaW1lb3V0IHRvIGF2b2lkIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3JcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1zUHJvcGVydGllcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25JdGVtc0NsaWNrKCk6IHZvaWQge1xuICAgICAgICAvKiogRmluaXNoIGFsbCB0aGUgc3RyZWFtcywgZnJvbSBiZWZvcmUgKi9cbiAgICAgICAgdGhpcy5fb25SZWZyZXNoJC5uZXh0KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmtleWJvYXJkU3VwcG9ydCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIE1lcmdlIHJlZnJlc2gvZGVzdHJveSBvYnNlcnZhYmxlcyAqL1xuICAgICAgICBjb25zdCBjb21wbGV0aW9uJCA9IG1lcmdlKHRoaXMuX29uUmVmcmVzaCQsIHRoaXMuX29uRGVzdHJveSQpO1xuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbkNoYW5nZXNJbmRleGVzOiBPYnNlcnZhYmxlPHsgaW5kZXg6IG51bWJlcjsgdXBkYXRlT25seTogYm9vbGVhbiB9PltdID0gdGhpcy5fZm9jdXNJdGVtcy5tYXAoXG4gICAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uX2NsaWNrZWQkLnBpcGUobWFwKCgpID0+ICh7IGluZGV4LCB1cGRhdGVPbmx5OiBmYWxzZSB9KSkpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtLl9mb2N1c2VkJC5waXBlKG1hcCgoeyBmb2N1c2VkV2l0aGluIH0pID0+ICh7IGluZGV4LCB1cGRhdGVPbmx5OiBmb2N1c2VkV2l0aGluIH0pKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIG1lcmdlKC4uLmludGVyYWN0aW9uQ2hhbmdlc0luZGV4ZXMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwoY29tcGxldGlvbiQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBpbmRleCwgdXBkYXRlT25seSB9KSA9PiB0aGlzLnNldEl0ZW1BY3RpdmUoaW5kZXgsIHVwZGF0ZU9ubHkpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgdXBkYXRlSXRlbXNQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICBsZXQgY2xvc2VzdExpc3RIZWFkZXI6IExpc3RHcm91cEhlYWRlckRpcmVjdGl2ZSB8IG51bGwgPSBudWxsO1xuICAgICAgICB0aGlzLl9mb2N1c0l0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIExpc3RHcm91cEhlYWRlckRpcmVjdGl2ZSkge1xuICAgICAgICAgICAgICAgIGNsb3Nlc3RMaXN0SGVhZGVyID0gaXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbSBpbnN0YW5jZW9mIExpc3RJdGVtQ29tcG9uZW50ICYmIGNsb3Nlc3RMaXN0SGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5fcmVsYXRlZEdyb3VwSGVhZGVySWQgPSBjbG9zZXN0TGlzdEhlYWRlci5uYXRpdmVFbGVtZW50SWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLnNldElzRmlyc3QoaW5kZXggPT09IDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlY2hlY2tMaW5rcygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5saW5rKTtcbiAgICAgICAgdGhpcy5oYXNOYXZpZ2F0aW9uID0gaXRlbXMubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFJvbGUgPSB0aGlzLmhhc05hdmlnYXRpb24gPyAnbmF2aWdhdGlvbicgOiAnbGlzdCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9kZWZhdWx0Um9sZSA9ICdsaXN0Ym94JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25MaXN0Rm9jdXNFc2NhcGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkU3VwcG9ydFNlcnZpY2UuZm9jdXNFc2NhcGVMaXN0XG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkaXJlY3Rpb24pID0+IHRoaXMuZm9jdXNFc2NhcGVMaXN0LmVtaXQoZGlyZWN0aW9uKSk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuIl19
@@ -550,7 +550,7 @@ export class MultiComboboxComponent extends BaseMultiCombobox {
550
550
  provide: MULTI_COMBOBOX_COMPONENT,
551
551
  useExisting: MultiComboboxComponent
552
552
  }
553
- ], queries: [{ propertyName: "customTemplates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true, read: ElementRef }, { propertyName: "listComponent", first: true, predicate: FD_LIST_COMPONENT, descendants: true }, { propertyName: "mobileControlTemplate", first: true, predicate: ["mobileControlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }, { propertyName: "_tokenizer", first: true, predicate: TokenizerComponent, descendants: true }, { propertyName: "_inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: ElementRef }], usesInheritance: true, hostDirectives: [{ directive: i2.CvaDirective, inputs: ["id", "inputId", "placeholder", "placeholder", "state", "state", "stateMessage", "stateMessage", "disabled", "disabled", "readonly", "readonly", "name", "name"] }, { directive: i3.DataSourceDirective, inputs: ["dataSource", "dataSource"], outputs: ["dataChanged", "dataChanged"] }], ngImport: i0, template: "<div class=\"fd-multi-combobox\">\n <ng-container [ngTemplateOutlet]=\"controlTemplate\" *ngIf=\"mobile\"></ng-container>\n\n <fd-popover\n *ngIf=\"!mobile\"\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"this._cva.disabled\"\n [fillControlMode]=\"fillControlMode\"\n >\n <fd-popover-control>\n <ng-container>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </ng-container>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize && 100\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"this._cva.id + '-input-group-container'\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"!this._cva.readonly\"\n [glyph]=\"!this._cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"_addOnClicked($event)\"\n (click)=\"mobile && !isOpen && _onPrimaryButtonClick(false)\"\n (keydown)=\"_navigateByTokens($event)\"\n >\n <fd-tokenizer\n *ngIf=\"_selectedSuggestions\"\n [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n >\n <fd-token\n [readOnly]=\"this._cva.disabled\"\n (onCloseClick)=\"_removeToken(token, $event)\"\n *ngFor=\"let token of _selectedSuggestions\"\n >\n {{ token.label }}\n </fd-token>\n\n <input\n #searchInputElement\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"!mobile && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [attr.aria-required]=\"this._cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n\n <fd-form-message\n *ngIf=\"mobile && isOpen ? false : !!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"this._cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel\"\n >\n <input\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched()\"\n (blur)=\"!mobile && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"this._cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile && maxHeight\"\n [style.min-width]=\"!mobile && minWidth + 'px'\"\n [style.max-width]=\"autoResize && maxWidth + 'px'\"\n [attr.aria-labelledby]=\"this._cva.id + '-search'\"\n aria-multiselectable=\"true\"\n >\n <fd-form-message\n *ngIf=\"!!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n <fd-multi-combobox-select-all-toggler\n *ngIf=\"showSelectAll\"\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange\"\n [selectedItems]=\"_selectedSuggestions\"\n [flatItems]=\"_flatSuggestions\"\n ></fd-multi-combobox-select-all-toggler>\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <label fd-list-group-header role=\"group\">\n <span fd-list-title>{{ group.label }}</span>\n </label>\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 fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && close()\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\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 fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && _onOptionClicked($event, i)\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\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=\"optionItem.selected && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(optionItem.selected && 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\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight : inputText\"\n ></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: ["/*!\n * Fundamental Library Styles v0.30.2-rc.6\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-margin--tiny{margin:.5rem!important}.fd-margin--sm{margin:1rem!important}.fd-margin--md{margin:2rem!important}.fd-margin--lg{margin:3rem!important}.fd-margin--none{margin:0!important}.fd-margin-top--tiny{margin-top:.5rem!important}.fd-margin-top--sm{margin-top:1rem!important}.fd-margin-top--md{margin-top:2rem!important}.fd-margin-top--lg{margin-top:3rem!important}.fd-margin-top--none{margin-top:0!important}.fd-margin-end--tiny{margin-right:.5rem!important}.fd-margin-end--tiny[dir=rtl],[dir=rtl] .fd-margin-end--tiny{margin-left:.5rem!important;margin-right:0!important}.fd-margin-end--sm{margin-right:1rem!important}.fd-margin-end--sm[dir=rtl],[dir=rtl] .fd-margin-end--sm{margin-left:1rem!important;margin-right:0!important}.fd-margin-end--md{margin-right:2rem!important}.fd-margin-end--md[dir=rtl],[dir=rtl] .fd-margin-end--md{margin-left:2rem!important;margin-right:0!important}.fd-margin-end--lg{margin-right:3rem!important}.fd-margin-end--lg[dir=rtl],[dir=rtl] .fd-margin-end--lg{margin-left:3rem!important;margin-right:0!important}.fd-margin-end--none{margin-right:0}.fd-margin-end--none[dir=rtl],[dir=rtl] .fd-margin-end--none{margin-left:0!important}.fd-margin-bottom--tiny{margin-bottom:.5rem!important}.fd-margin-bottom--sm{margin-bottom:1rem!important}.fd-margin-bottom--md{margin-bottom:2rem!important}.fd-margin-bottom--lg{margin-bottom:3rem!important}.fd-margin-bottom--none{margin-bottom:0!important}.fd-margin-begin--tiny{margin-left:.5rem!important}.fd-margin-begin--tiny[dir=rtl],[dir=rtl] .fd-margin-begin--tiny{margin-left:0!important;margin-right:.5rem!important}.fd-margin-begin--sm{margin-left:1rem!important}.fd-margin-begin--sm[dir=rtl],[dir=rtl] .fd-margin-begin--sm{margin-left:0!important;margin-right:1rem!important}.fd-margin-begin--md{margin-left:2rem!important}.fd-margin-begin--md[dir=rtl],[dir=rtl] .fd-margin-begin--md{margin-left:0!important;margin-right:2rem!important}.fd-margin-begin--lg{margin-left:3rem!important}.fd-margin-begin--lg[dir=rtl],[dir=rtl] .fd-margin-begin--lg{margin-left:0!important;margin-right:3rem!important}.fd-margin-begin--none{margin-left:0}.fd-margin-begin--none[dir=rtl],[dir=rtl] .fd-margin-begin--none{margin-right:0!important}.fd-margin-top-bottom--tiny{margin-bottom:.5rem!important;margin-top:.5rem!important}.fd-margin-top-bottom--sm{margin-bottom:1rem!important;margin-top:1rem!important}.fd-margin-top-bottom--md{margin-bottom:2rem!important;margin-top:2rem!important}.fd-margin-top-bottom--lg{margin-bottom:3rem!important;margin-top:3rem!important}.fd-margin-begin-end--tiny{margin-left:.5rem!important;margin-right:.5rem!important}.fd-margin-begin-end--sm{margin-left:1rem!important;margin-right:1rem!important}.fd-margin-begin-end--md{margin-left:2rem!important;margin-right:2rem!important}.fd-margin-begin-end--lg{margin-left:3rem!important;margin-right:3rem!important}.fd-margin-responsive--sm{margin:0 0 1rem!important}.fd-margin-responsive--md{margin:1rem!important}.fd-margin-responsive--lg{margin:1rem 2rem!important}.fd-margin-responsive--xl{margin:1rem 3rem!important}.fd-margin-negative-begin-end--tiny{margin:0 -.5rem!important}.fd-margin-negative-begin-end--sm{margin:0 -1rem!important}.fd-margin-negative-begin-end--md{margin:0 -2rem!important}.fd-margin-negative-begin-end--lg{margin:0 -3rem!important}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=\"--cozy\"]):not([class*=\"--condensed\"]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{display:block;max-width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i5.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i6.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i7.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i7.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i8.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i8.TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "component", type: i9.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i9.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: i9.FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen"], outputs: ["isOpenChange"] }, { kind: "component", type: i10.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator"], outputs: ["focusEscapeList"] }, { kind: "component", type: i10.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline"], outputs: ["keyDown"] }, { kind: "directive", type: i10.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i10.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: i10.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i11.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: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "displayFn"], outputs: ["onComplete"] }, { kind: "component", type: i12.SelectAllTogglerComponent, selector: "fd-multi-combobox-select-all-toggler", inputs: ["selectAllHandler", "valueChanges", "selectedItems", "flatItems"] }, { kind: "pipe", type: i13.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i1.SearchHighlightPipe, name: "highlight" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
553
+ ], queries: [{ propertyName: "customTemplates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true, read: ElementRef }, { propertyName: "listComponent", first: true, predicate: FD_LIST_COMPONENT, descendants: true }, { propertyName: "mobileControlTemplate", first: true, predicate: ["mobileControlTemplate"], descendants: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true }, { propertyName: "_tokenizer", first: true, predicate: TokenizerComponent, descendants: true }, { propertyName: "_inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: ElementRef }], usesInheritance: true, hostDirectives: [{ directive: i2.CvaDirective, inputs: ["id", "inputId", "placeholder", "placeholder", "state", "state", "stateMessage", "stateMessage", "disabled", "disabled", "readonly", "readonly", "name", "name"] }, { directive: i3.DataSourceDirective, inputs: ["dataSource", "dataSource"], outputs: ["dataChanged", "dataChanged"] }], ngImport: i0, template: "<div class=\"fd-multi-combobox\">\n <ng-container [ngTemplateOutlet]=\"controlTemplate\" *ngIf=\"mobile\"></ng-container>\n\n <fd-popover\n *ngIf=\"!mobile\"\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"this._cva.disabled\"\n [fillControlMode]=\"fillControlMode\"\n >\n <fd-popover-control>\n <ng-container>\n <ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container>\n </ng-container>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize && 100\">\n <ng-container *ngTemplateOutlet=\"listTemplate\"></ng-container>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n</div>\n\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"this._cva.id + '-input-group-container'\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"!this._cva.readonly\"\n [glyph]=\"!this._cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n [iconTitle]=\"addonIconTitle || ('platformMultiCombobox.inputGlyphAriaLabel' | fdTranslate)\"\n (addOnButtonClicked)=\"_addOnClicked($event)\"\n (click)=\"mobile && !isOpen && _onPrimaryButtonClick(false)\"\n (keydown)=\"_navigateByTokens($event)\"\n >\n <fd-tokenizer\n *ngIf=\"_selectedSuggestions\"\n [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n >\n <fd-token\n [readOnly]=\"this._cva.disabled\"\n (onCloseClick)=\"_removeToken(token, $event)\"\n *ngFor=\"let token of _selectedSuggestions\"\n >\n {{ token.label }}\n </fd-token>\n\n <input\n #searchInputElement\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched(); tokenizer._showAllTokens()\"\n (blur)=\"!mobile && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [attr.aria-required]=\"this._cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n\n <fd-form-message\n *ngIf=\"mobile && isOpen ? false : !!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n </fd-form-input-message-group>\n</ng-template>\n\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"this._cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"this._cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"this._cva.disabled || this._cva.readonly\"\n [isExpanded]=\"!mobile && isOpen && _suggestions.length > 0\"\n [attr.aria-disabled]=\"this._cva.disabled || this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [glyphAriaLabel]=\"this._cva.ariaLabel\"\n >\n <input\n fdkAutoComplete\n (onComplete)=\"_onCompleteTerm($event)\"\n [options]=\"_suggestions\"\n [inputText]=\"inputText\"\n type=\"text\"\n role=\"combobox\"\n autocomplete=\"off\"\n [attr.aria-label]=\"this._cva.ariaLabel\"\n [attr.aria-labelledby]=\"this._cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete && !mobile ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete && !mobile ? this._cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete && !mobile\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"this._cva.id\"\n [name]=\"this._cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"this._cva.disabled\"\n [(ngModel)]=\"inputText\"\n (ngModelChange)=\"_searchTermChanged()\"\n [placeholder]=\"this._cva.placeholder\"\n (focus)=\"this._cva.onTouched()\"\n (blur)=\"!mobile && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"this._cva.readonly\"\n [attr.aria-readonly]=\"this._cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n\n<ng-template #listTemplate>\n <ul\n fd-list\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n [dropdownMode]=\"true\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"this._cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile && maxHeight\"\n [style.min-width]=\"!mobile && minWidth + 'px'\"\n [style.max-width]=\"autoResize && maxWidth + 'px'\"\n [attr.aria-labelledby]=\"this._cva.id + '-search'\"\n aria-multiselectable=\"true\"\n >\n <fd-form-message\n *ngIf=\"!!this._cva.stateMessage\"\n [type]=\"this._cva.state\"\n [innerHtml]=\"this._cva.stateMessage\"\n ></fd-form-message>\n <fd-multi-combobox-select-all-toggler\n *ngIf=\"showSelectAll\"\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange\"\n [selectedItems]=\"_selectedSuggestions\"\n [flatItems]=\"_flatSuggestions\"\n ></fd-multi-combobox-select-all-toggler>\n <ng-content></ng-content>\n <ng-container *ngIf=\"isGroup\">\n <ng-container *ngFor=\"let group of _suggestions\">\n <ng-container *ngIf=\"!groupItemTemplate\">\n <label fd-list-group-header role=\"group\">\n <span fd-list-title>{{ group.label }}</span>\n </label>\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 fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && close()\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\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 fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile && _onOptionClicked($event, i)\"\n (keyDown)=\"_onItemKeyDownHandler($event, i)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\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=\"optionItem.selected && !!selectedItemTemplate\"\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-container>\n\n <ng-container *ngIf=\"!(optionItem.selected && 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\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight : inputText\"\n ></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: ["/*!\n * Fundamental Library Styles v0.30.2-rc.6\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-margin--tiny{margin:.5rem!important}.fd-margin--sm{margin:1rem!important}.fd-margin--md{margin:2rem!important}.fd-margin--lg{margin:3rem!important}.fd-margin--none{margin:0!important}.fd-margin-top--tiny{margin-top:.5rem!important}.fd-margin-top--sm{margin-top:1rem!important}.fd-margin-top--md{margin-top:2rem!important}.fd-margin-top--lg{margin-top:3rem!important}.fd-margin-top--none{margin-top:0!important}.fd-margin-end--tiny{margin-right:.5rem!important}.fd-margin-end--tiny[dir=rtl],[dir=rtl] .fd-margin-end--tiny{margin-left:.5rem!important;margin-right:0!important}.fd-margin-end--sm{margin-right:1rem!important}.fd-margin-end--sm[dir=rtl],[dir=rtl] .fd-margin-end--sm{margin-left:1rem!important;margin-right:0!important}.fd-margin-end--md{margin-right:2rem!important}.fd-margin-end--md[dir=rtl],[dir=rtl] .fd-margin-end--md{margin-left:2rem!important;margin-right:0!important}.fd-margin-end--lg{margin-right:3rem!important}.fd-margin-end--lg[dir=rtl],[dir=rtl] .fd-margin-end--lg{margin-left:3rem!important;margin-right:0!important}.fd-margin-end--none{margin-right:0}.fd-margin-end--none[dir=rtl],[dir=rtl] .fd-margin-end--none{margin-left:0!important}.fd-margin-bottom--tiny{margin-bottom:.5rem!important}.fd-margin-bottom--sm{margin-bottom:1rem!important}.fd-margin-bottom--md{margin-bottom:2rem!important}.fd-margin-bottom--lg{margin-bottom:3rem!important}.fd-margin-bottom--none{margin-bottom:0!important}.fd-margin-begin--tiny{margin-left:.5rem!important}.fd-margin-begin--tiny[dir=rtl],[dir=rtl] .fd-margin-begin--tiny{margin-left:0!important;margin-right:.5rem!important}.fd-margin-begin--sm{margin-left:1rem!important}.fd-margin-begin--sm[dir=rtl],[dir=rtl] .fd-margin-begin--sm{margin-left:0!important;margin-right:1rem!important}.fd-margin-begin--md{margin-left:2rem!important}.fd-margin-begin--md[dir=rtl],[dir=rtl] .fd-margin-begin--md{margin-left:0!important;margin-right:2rem!important}.fd-margin-begin--lg{margin-left:3rem!important}.fd-margin-begin--lg[dir=rtl],[dir=rtl] .fd-margin-begin--lg{margin-left:0!important;margin-right:3rem!important}.fd-margin-begin--none{margin-left:0}.fd-margin-begin--none[dir=rtl],[dir=rtl] .fd-margin-begin--none{margin-right:0!important}.fd-margin-top-bottom--tiny{margin-bottom:.5rem!important;margin-top:.5rem!important}.fd-margin-top-bottom--sm{margin-bottom:1rem!important;margin-top:1rem!important}.fd-margin-top-bottom--md{margin-bottom:2rem!important;margin-top:2rem!important}.fd-margin-top-bottom--lg{margin-bottom:3rem!important;margin-top:3rem!important}.fd-margin-begin-end--tiny{margin-left:.5rem!important;margin-right:.5rem!important}.fd-margin-begin-end--sm{margin-left:1rem!important;margin-right:1rem!important}.fd-margin-begin-end--md{margin-left:2rem!important;margin-right:2rem!important}.fd-margin-begin-end--lg{margin-left:3rem!important;margin-right:3rem!important}.fd-margin-responsive--sm{margin:0 0 1rem!important}.fd-margin-responsive--md{margin:1rem!important}.fd-margin-responsive--lg{margin:1rem 2rem!important}.fd-margin-responsive--xl{margin:1rem 3rem!important}.fd-margin-negative-begin-end--tiny{margin:0 -.5rem!important}.fd-margin-negative-begin-end--sm{margin:0 -1rem!important}.fd-margin-negative-begin-end--md{margin:0 -2rem!important}.fd-margin-negative-begin-end--lg{margin:0 -3rem!important}.fd-multi-combobox-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-combobox-tokenizer-custom:not([class*=\"--cozy\"]):not([class*=\"--condensed\"]),.is-compact .fd-multi-combobox-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-combobox-tokenizer-custom[class*=--compact],.fd-multi-combobox-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-combobox-input-group-custom{display:inline-block}.fd-multi-combobox .fd-popover-custom{display:block}.fd-multi-combobox__list-container .fd-list .fd-list__item.fd-list__group-header{padding:0 1rem}.fd-multi-combobox__list-container .fd-list .fd-list__item .fd-list__title{max-width:inherit}.fd-multi-combobox__list-container .fd-list.fd-list--compact .fd-list__item.fd-list__group-header{padding:0 .5rem}.fd-multi-combobox__list-container fd-form-message{max-width:100%;border-radius:0!important}.fd-dialog__body fd-form-message{display:block;max-width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i5.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i6.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i7.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i7.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i8.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i8.TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "component", type: i9.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i9.FormMessageComponent, selector: "fd-form-message", inputs: ["type", "static", "embedded", "class"] }, { kind: "component", type: i9.FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen"], outputs: ["isOpenChange"] }, { kind: "component", type: i10.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i10.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline"], outputs: ["keyDown"] }, { kind: "directive", type: i10.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "directive", type: i10.ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: i10.ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: i11.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: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "displayFn"], outputs: ["onComplete"] }, { kind: "component", type: i12.SelectAllTogglerComponent, selector: "fd-multi-combobox-select-all-toggler", inputs: ["selectAllHandler", "valueChanges", "selectedItems", "flatItems"] }, { kind: "pipe", type: i13.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i1.SearchHighlightPipe, name: "highlight" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
554
554
  }
555
555
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: MultiComboboxComponent, decorators: [{
556
556
  type: Component,
@@ -608,7 +608,7 @@ export class MultiInputComponent {
608
608
  MenuKeyboardService,
609
609
  registerFormItemControl(MultiInputComponent),
610
610
  contentDensityObserverProviders()
611
- ], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["control"], descendants: true, read: TemplateRef }, { propertyName: "listTemplate", first: true, predicate: ["list"], descendants: true, read: TemplateRef }, { propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true, read: ElementRef }, { propertyName: "tokenizer", first: true, predicate: TokenizerComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"_viewModel$ | async as viewModel\">\n <div class=\"fd-multi-input fd-multi-input-custom\">\n <div class=\"fd-multi-input-field\">\n <ng-container\n [ngTemplateOutlet]=\"control\"\n [ngTemplateOutletContext]=\"{ displayAddonButton: displayAddonButton }\"\n *ngIf=\"mobile\"\n ></ng-container>\n\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n *ngIf=\"!mobile\"\n [isOpen]=\"open\"\n (isOpenChange)=\"openChangeHandle($event)\"\n (input)=\"!open && openChangeHandle(true)\"\n [triggers]=\"[]\"\n [maxWidth]=\"_popoverMaxWidth\"\n [disabled]=\"disabled\"\n [fillControlMode]=\"fillControlMode\"\n class=\"fd-multi-input-popover-custom\"\n >\n <fd-popover-control>\n <form (submit)=\"_onSubmit()\">\n <ng-container\n *ngTemplateOutlet=\"control; context: { displayAddonButton: displayAddonButton }\"\n ></ng-container>\n </form>\n </fd-popover-control>\n\n <fd-popover-body\n [attr.aria-hidden]=\"!open\"\n [class.fd-popover__body--hidden]=\"!viewModel.displayedOptions.length\"\n >\n <ng-container *ngTemplateOutlet=\"list\"></ng-container>\n\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n </div>\n </div>\n\n <ng-template #control let-showAddonButton=\"displayAddonButton\">\n <fd-input-group\n class=\"fd-multi-input-input-group-custom\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"showAddonButton\"\n [disabled]=\"disabled\"\n [isExpanded]=\"open && !mobile && viewModel.displayedOptions.length > 0\"\n [isControl]=\"true\"\n [glyph]=\"showAddonButton ? glyph : ''\"\n [iconTitle]=\"title\"\n (addOnButtonClicked)=\"_addOnButtonClicked($event)\"\n >\n <fd-tokenizer\n #tokenizer\n [compactCollapse]=\"compactCollapse\"\n [open]=\"open\"\n [tokenizerFocusable]=\"false\"\n (moreClickedEvent)=\"_moreClicked()\"\n class=\"fd-multi-input-tokenizer-custom\"\n tabindex=\"-1\"\n >\n <fd-token\n *ngFor=\"let option of viewModel.selectedOptions; trackBy: valueFn\"\n [disabled]=\"disabled\"\n (onCloseClick)=\"_onTokenClick(option.value, false, $event)\"\n (onRemove)=\"_onTokenClick(option.value, false)\"\n >\n <span [innerHtml]=\"option.label\"></span>\n </fd-token>\n\n <input\n type=\"text\"\n class=\"fd-input fd-tokenizer__input fd-multi-input-tokenizer-input\"\n autocomplete=\"off\"\n fd-form-control\n fd-input-group-input\n fdkAutoComplete\n (onComplete)=\"_handleComplete($event)\"\n #searchInputElement\n [displayFn]=\"displayFn\"\n [inputText]=\"_searchTermCtrl.value || ''\"\n [options]=\"dropdownValues\"\n [enable]=\"autoComplete && !mobile\"\n [placeholder]=\"placeholder\"\n [formControl]=\"_searchTermCtrl\"\n [attr.aria-required]=\"required\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n (keydown)=\"_handleInputKeydown($event)\"\n [attr.id]=\"inputId\"\n (focus)=\"tokenizer._showAllTokens()\"\n (blur)=\"tokenizer._hideTokens()\"\n />\n </fd-tokenizer>\n </fd-input-group>\n </ng-template>\n\n <ng-template #list>\n <ul\n *ngIf=\"viewModel.displayedOptions.length\"\n fd-list\n class=\"fd-multi-input-menu-overflow\"\n [selection]=\"true\"\n [mobileMode]=\"mobile\"\n [style.maxHeight]=\"!mobile ? maxHeight : 'auto'\"\n [byline]=\"byline\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [style.minWidth]=\"'100%'\"\n aria-multiselectable=\"true\"\n >\n <li\n *ngFor=\"let option of viewModel.displayedOptions; index as idx; trackBy: valueFn\"\n fd-list-item\n [attr.aria-label]=\"option.label\"\n (click)=\"_onCheckboxClick(option.value, $event, idx, true)\"\n (keyup)=\"_onCheckboxKeyup(option.value, $event, idx)\"\n [selected]=\"option.isSelected\"\n >\n <fd-checkbox (click)=\"_onCheckboxClick(option.value, $event, idx)\" [value]=\"option.isSelected\">\n <!-- TODO -->\n </fd-checkbox>\n\n <ng-container\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ option: option }\"\n ></ng-container>\n </li>\n\n <li\n *ngIf=\"showAllButton && viewModel.displayedOptions.length < dropdownValues.length\"\n fd-list-item\n class=\"fd-multi-input-show-all\"\n (keyDown)=\"_showAllKeyDown($event)\"\n (click)=\"_showAllClicked($event)\"\n >\n <a fd-link tabindex=\"0\">Show All ({{ dropdownValues.length }})</a>\n </li>\n </ul>\n </ng-template>\n\n <ng-template let-option=\"option\" #itemSource>\n <span\n *ngIf=\"!itemTemplate\"\n fd-list-title\n [innerHtml]=\"option.label | highlight : _searchTermCtrl.value || '' : highlight\"\n ></span>\n\n <ng-container *ngIf=\"itemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option.item }\"\n ></ng-container>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [".fd-multi-input-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-input-tokenizer-custom:not([class*=\"--cozy\"]):not([class*=\"--condensed\"]),.is-compact .fd-multi-input-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-input-tokenizer-custom[class*=--compact],.fd-multi-input-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-input-input-group-custom{max-width:100%}.fd-multi-input-custom{display:block}.fd-multi-input-item{cursor:pointer;padding:0}.fd-multi-input-popover-size{overflow:auto;display:block}.fd-multi-input-popover-custom.fd-popover-custom{max-width:100%;display:block}.fd-multi-input-show-all{width:100%;display:flex;justify-content:flex-end;background-color:transparent}.fd-multi-input-show-all .fd-link:active{color:inherit}.fd-multi-input-checkbox{width:100%;cursor:pointer}.fd-multi-input-checkbox .fd-checkbox__label{color:inherit}.fd-multi-input-menu-overflow{max-width:37.5rem}.fd-input.fd-multi-input-tokenizer-input{min-width:4rem;margin-top:0;margin-bottom:0;padding-left:0;background-color:transparent}.fd-list--multi-input{max-width:100%}.fd-popover__body--hidden{display:none}\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.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i4.TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator"], outputs: ["focusEscapeList"] }, { kind: "component", type: i6.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline"], outputs: ["keyDown"] }, { kind: "directive", type: i6.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i8.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i8.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i9.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i10.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i11.LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "directive", type: i2.AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "displayFn"], outputs: ["onComplete"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.SearchHighlightPipe, name: "highlight" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
611
+ ], viewQueries: [{ propertyName: "popoverRef", first: true, predicate: PopoverComponent, descendants: true }, { propertyName: "controlTemplate", first: true, predicate: ["control"], descendants: true, read: TemplateRef }, { propertyName: "listTemplate", first: true, predicate: ["list"], descendants: true, read: TemplateRef }, { propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true, read: ElementRef }, { propertyName: "tokenizer", first: true, predicate: TokenizerComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"_viewModel$ | async as viewModel\">\n <div class=\"fd-multi-input fd-multi-input-custom\">\n <div class=\"fd-multi-input-field\">\n <ng-container\n [ngTemplateOutlet]=\"control\"\n [ngTemplateOutletContext]=\"{ displayAddonButton: displayAddonButton }\"\n *ngIf=\"mobile\"\n ></ng-container>\n\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list\"\n *ngIf=\"!mobile\"\n [isOpen]=\"open\"\n (isOpenChange)=\"openChangeHandle($event)\"\n (input)=\"!open && openChangeHandle(true)\"\n [triggers]=\"[]\"\n [maxWidth]=\"_popoverMaxWidth\"\n [disabled]=\"disabled\"\n [fillControlMode]=\"fillControlMode\"\n class=\"fd-multi-input-popover-custom\"\n >\n <fd-popover-control>\n <form (submit)=\"_onSubmit()\">\n <ng-container\n *ngTemplateOutlet=\"control; context: { displayAddonButton: displayAddonButton }\"\n ></ng-container>\n </form>\n </fd-popover-control>\n\n <fd-popover-body\n [attr.aria-hidden]=\"!open\"\n [class.fd-popover__body--hidden]=\"!viewModel.displayedOptions.length\"\n >\n <ng-container *ngTemplateOutlet=\"list\"></ng-container>\n\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n </div>\n </div>\n\n <ng-template #control let-showAddonButton=\"displayAddonButton\">\n <fd-input-group\n class=\"fd-multi-input-input-group-custom\"\n [state]=\"state\"\n [buttonFocusable]=\"buttonFocusable\"\n [button]=\"showAddonButton\"\n [disabled]=\"disabled\"\n [isExpanded]=\"open && !mobile && viewModel.displayedOptions.length > 0\"\n [isControl]=\"true\"\n [glyph]=\"showAddonButton ? glyph : ''\"\n [iconTitle]=\"title\"\n (addOnButtonClicked)=\"_addOnButtonClicked($event)\"\n >\n <fd-tokenizer\n #tokenizer\n [compactCollapse]=\"compactCollapse\"\n [open]=\"open\"\n [tokenizerFocusable]=\"false\"\n (moreClickedEvent)=\"_moreClicked()\"\n class=\"fd-multi-input-tokenizer-custom\"\n tabindex=\"-1\"\n >\n <fd-token\n *ngFor=\"let option of viewModel.selectedOptions; trackBy: valueFn\"\n [disabled]=\"disabled\"\n (onCloseClick)=\"_onTokenClick(option.value, false, $event)\"\n (onRemove)=\"_onTokenClick(option.value, false)\"\n >\n <span [innerHtml]=\"option.label\"></span>\n </fd-token>\n\n <input\n type=\"text\"\n class=\"fd-input fd-tokenizer__input fd-multi-input-tokenizer-input\"\n autocomplete=\"off\"\n fd-form-control\n fd-input-group-input\n fdkAutoComplete\n (onComplete)=\"_handleComplete($event)\"\n #searchInputElement\n [displayFn]=\"displayFn\"\n [inputText]=\"_searchTermCtrl.value || ''\"\n [options]=\"dropdownValues\"\n [enable]=\"autoComplete && !mobile\"\n [placeholder]=\"placeholder\"\n [formControl]=\"_searchTermCtrl\"\n [attr.aria-required]=\"required\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n (keydown)=\"_handleInputKeydown($event)\"\n [attr.id]=\"inputId\"\n (focus)=\"tokenizer._showAllTokens()\"\n (blur)=\"tokenizer._hideTokens()\"\n />\n </fd-tokenizer>\n </fd-input-group>\n </ng-template>\n\n <ng-template #list>\n <ul\n *ngIf=\"viewModel.displayedOptions.length\"\n fd-list\n class=\"fd-multi-input-menu-overflow\"\n [selection]=\"true\"\n [mobileMode]=\"mobile\"\n [style.maxHeight]=\"!mobile ? maxHeight : 'auto'\"\n [byline]=\"byline\"\n (focusEscapeList)=\"handleListFocusEscape($event)\"\n [style.minWidth]=\"'100%'\"\n aria-multiselectable=\"true\"\n >\n <li\n *ngFor=\"let option of viewModel.displayedOptions; index as idx; trackBy: valueFn\"\n fd-list-item\n [attr.aria-label]=\"option.label\"\n (click)=\"_onCheckboxClick(option.value, $event, idx, true)\"\n (keyup)=\"_onCheckboxKeyup(option.value, $event, idx)\"\n [selected]=\"option.isSelected\"\n >\n <fd-checkbox (click)=\"_onCheckboxClick(option.value, $event, idx)\" [value]=\"option.isSelected\">\n <!-- TODO -->\n </fd-checkbox>\n\n <ng-container\n [ngTemplateOutlet]=\"itemSource\"\n [ngTemplateOutletContext]=\"{ option: option }\"\n ></ng-container>\n </li>\n\n <li\n *ngIf=\"showAllButton && viewModel.displayedOptions.length < dropdownValues.length\"\n fd-list-item\n class=\"fd-multi-input-show-all\"\n (keyDown)=\"_showAllKeyDown($event)\"\n (click)=\"_showAllClicked($event)\"\n >\n <a fd-link tabindex=\"0\">Show All ({{ dropdownValues.length }})</a>\n </li>\n </ul>\n </ng-template>\n\n <ng-template let-option=\"option\" #itemSource>\n <span\n *ngIf=\"!itemTemplate\"\n fd-list-title\n [innerHtml]=\"option.label | highlight : _searchTermCtrl.value || '' : highlight\"\n ></span>\n\n <ng-container *ngIf=\"itemTemplate\">\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option.item }\"\n ></ng-container>\n </ng-container>\n </ng-template>\n</ng-container>\n", styles: [".fd-multi-input-tokenizer-custom{width:calc(100% - 2.25rem)}[class*=--compact] .fd-multi-input-tokenizer-custom:not([class*=\"--cozy\"]):not([class*=\"--condensed\"]),.is-compact .fd-multi-input-tokenizer-custom:not(.is-cozy):not(.is-condensed),.fd-multi-input-tokenizer-custom[class*=--compact],.fd-multi-input-tokenizer-custom.is-compact{width:calc(100% - 2rem)}.fd-multi-input-input-group-custom{max-width:100%}.fd-multi-input-custom{display:block}.fd-multi-input-item{cursor:pointer;padding:0}.fd-multi-input-popover-size{overflow:auto;display:block}.fd-multi-input-popover-custom.fd-popover-custom{max-width:100%;display:block}.fd-multi-input-show-all{width:100%;display:flex;justify-content:flex-end;background-color:transparent}.fd-multi-input-show-all .fd-link:active{color:inherit}.fd-multi-input-checkbox{width:100%;cursor:pointer}.fd-multi-input-checkbox .fd-checkbox__label{color:inherit}.fd-multi-input-menu-overflow{max-width:37.5rem}.fd-input.fd-multi-input-tokenizer-input{min-width:4rem;margin-top:0;margin-bottom:0;padding-left:0;background-color:transparent}.fd-list--multi-input{max-width:100%}.fd-popover__body--hidden{display:none}\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.TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused"] }, { kind: "component", type: i4.TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "moreTerm", "open"], outputs: ["moreClickedEvent"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i6.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i6.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline"], outputs: ["keyDown"] }, { kind: "directive", type: i6.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i8.InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "directive", type: i8.InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: i9.FormControlComponent, selector: "[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "component", type: i10.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i11.LinkComponent, selector: "[fdLink], [fd-link]", inputs: ["class", "emphasized", "disabled", "inverted", "subtle", "undecorated"] }, { kind: "directive", type: i2.AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "displayFn"], outputs: ["onComplete"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.SearchHighlightPipe, name: "highlight" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
612
612
  }
613
613
  __decorate([
614
614
  applyCssClass,