@fundamental-ngx/core 0.65.0-rc.2 → 0.65.0-rc.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/fundamental-ngx-core-action-bar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-action-sheet.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar-group.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-avatar-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-bar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-busy-indicator.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-button.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-calendar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-calendar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-card.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-carousel.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-checkbox.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-checkbox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-combobox.mjs +48 -6
- package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-date-picker.mjs +1 -4
- package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +21 -0
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dynamic-page.mjs +25 -8
- package/fesm2022/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dynamic-side-content.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-facets.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-feed-input.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-file-uploader.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-file-uploader.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-flexible-column-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs +14 -14
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-generic-tag.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-generic-tag.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-grid-list.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-grid-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-icon.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-icon.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-info-label.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-input-group.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-layout-grid.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-layout-panel.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-link.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs +12 -8
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-menu.mjs +63 -2
- package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-message-page.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-message-strip.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-message-toast.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-micro-process-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +19 -3
- package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
- package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-notification.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-notification.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-attribute.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-object-attribute.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-identifier.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-object-marker.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-object-marker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-object-status.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-pagination.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-panel.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-popover.mjs +5 -6
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-product-switch.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-progress-indicator.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-quick-view.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-radio.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-radio.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-rating-indicator.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-resizable-card-layout.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-segmented-button.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-select.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-settings.mjs +115 -15
- package/fesm2022/fundamental-ngx-core-settings.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-side-navigation.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-skeleton.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-slider.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-split-button.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-status-indicator.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-step-input.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-switch.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-table.mjs +374 -500
- package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-text.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tile.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-time.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-title.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-token.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-tree.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-user-menu.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-user-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-vertical-navigation.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-wizard.mjs +2 -2
- package/package.json +4 -4
- package/schematics/package.json +1 -1
- package/types/fundamental-ngx-core-combobox.d.ts +4 -0
- package/types/fundamental-ngx-core-datetime-picker.d.ts +3 -1
- package/types/fundamental-ngx-core-list.d.ts +4 -1
- package/types/fundamental-ngx-core-menu.d.ts +8 -1
- package/types/fundamental-ngx-core-settings.d.ts +57 -5
- package/types/fundamental-ngx-core-table.d.ts +133 -164
|
@@ -14,7 +14,7 @@ import { isSelectItem, CvaControl, CvaDirective, isOptionItem, isSelectableOptio
|
|
|
14
14
|
import { ListFocusItem, FD_LIST_COMPONENT, ListComponent, ListGroupHeaderDirective, ListTitleDirective, ListItemComponent, ListSecondaryDirective } from '@fundamental-ngx/core/list';
|
|
15
15
|
import { ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
|
|
16
16
|
import { skip, timer, Subscription, isObservable, Subject } from 'rxjs';
|
|
17
|
-
import { debounceTime } from 'rxjs/operators';
|
|
17
|
+
import { filter, debounceTime } from 'rxjs/operators';
|
|
18
18
|
import { PopoverComponent, PopoverControlComponent, PopoverBodyComponent } from '@fundamental-ngx/core/popover';
|
|
19
19
|
import { shallowEqual } from 'fast-equals';
|
|
20
20
|
import { NgTemplateOutlet, NgClass } from '@angular/common';
|
|
@@ -609,6 +609,9 @@ class BaseMultiCombobox {
|
|
|
609
609
|
const currentSuggestions = this._suggestions();
|
|
610
610
|
this._flatSuggestions.set(this.isGroup() ? flattenGroups(currentSuggestions) : currentSuggestions);
|
|
611
611
|
this._fullFlatSuggestions.set(this._flatSuggestions());
|
|
612
|
+
if (!this._selectedItems().length && this._cva.value?.length) {
|
|
613
|
+
this._setSelectedItems(this._cva.value);
|
|
614
|
+
}
|
|
612
615
|
this._setSelectedSuggestions();
|
|
613
616
|
this._mapAndUpdateModel();
|
|
614
617
|
this._dataSourceChanged = false;
|
|
@@ -1323,6 +1326,16 @@ class MultiComboboxComponent extends BaseMultiCombobox {
|
|
|
1323
1326
|
}
|
|
1324
1327
|
this._assignCustomTemplates();
|
|
1325
1328
|
this._initWindowResize();
|
|
1329
|
+
// Sync selected items when FormControl.setValue() is called (CVA.writeValue event).
|
|
1330
|
+
// This catches programmatic value updates even without a [selectedItems] binding.
|
|
1331
|
+
// Requires datasource to be populated for the lookup to succeed.
|
|
1332
|
+
this._cva.stateChanges
|
|
1333
|
+
.pipe(filter((event) => event === 'writeValue'), takeUntilDestroyed(this._destroyRef))
|
|
1334
|
+
.subscribe(() => {
|
|
1335
|
+
if (this._fullFlatSuggestions().length) {
|
|
1336
|
+
this._setSelectedItems(this._cva.value);
|
|
1337
|
+
}
|
|
1338
|
+
});
|
|
1326
1339
|
}
|
|
1327
1340
|
/** @hidden */
|
|
1328
1341
|
_toggleSelection(item, fromTokenCloseClick = false) {
|
|
@@ -1621,6 +1634,9 @@ class MultiComboboxComponent extends BaseMultiCombobox {
|
|
|
1621
1634
|
*/
|
|
1622
1635
|
_setSelectedItems(value) {
|
|
1623
1636
|
this._selectedItems.set(coerceArraySafe(value));
|
|
1637
|
+
if (this._fullFlatSuggestions().length) {
|
|
1638
|
+
this._setSelectedSuggestions();
|
|
1639
|
+
}
|
|
1624
1640
|
}
|
|
1625
1641
|
/**
|
|
1626
1642
|
* Updates the input text and triggers form control touch event.
|
|
@@ -1800,7 +1816,7 @@ class MultiComboboxComponent extends BaseMultiCombobox {
|
|
|
1800
1816
|
provide: MULTI_COMBOBOX_COMPONENT,
|
|
1801
1817
|
useExisting: MultiComboboxComponent
|
|
1802
1818
|
}
|
|
1803
|
-
], queries: [{ propertyName: "customTemplates", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true, isSignal: true }, { propertyName: "listComponent", first: true, predicate: FD_LIST_COMPONENT, descendants: true, isSignal: true }, { propertyName: "mobileControlTemplate", first: true, predicate: ["mobileControlTemplate"], descendants: true, isSignal: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true, isSignal: true }, { propertyName: "_tokenizer", first: true, predicate: TokenizerComponent, descendants: true, isSignal: true }, { propertyName: "_inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "items", predicate: ["item"], descendants: true, read: ElementRef, isSignal: true }], 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 @if (mobile()) {\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n } @else {\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"_cva.disabled\"\n [maxWidth]=\"_popoverMaxWidth\"\n [fillControlMode]=\"fillControlMode()\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize() && 100\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n }\n</div>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"_cva.id + '-input-group-container'\"\n [state]=\"_cva.state\"\n [buttonFocusable]=\"buttonFocusable()\"\n [button]=\"!_cva.readonly\"\n [glyph]=\"!_cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"_cva.disabled || _cva.readonly\"\n [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [glyphAriaLabel]=\"_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 [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n [showOverflowPopover]=\"false\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n fdMultiAnnouncer\n [multiAnnouncerOptions]=\"_suggestions()\"\n >\n @for (token of _selectedSuggestions(); track token.id) {\n <fd-token [readOnly]=\"_cva.disabled\" (onCloseClick)=\"_removeToken(token, $event)\">\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 [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"_cva.id\"\n [name]=\"_cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"_cva.disabled\"\n [ngModel]=\"_inputText()\"\n (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n [attr.placeholder]=\"_selectedSuggestions().length ? null : _cva.placeholder\"\n (focus)=\"tokenizer._showAllTokens()\"\n (blur)=\"!mobile() && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"_cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [attr.aria-required]=\"_cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input fd-input-group__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n @if (mobile() && isOpen ? false : !!_cva.stateMessage) {\n <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"_cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"_cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"_cva.disabled || _cva.readonly\"\n [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [glyphAriaLabel]=\"_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 [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"_cva.id\"\n [name]=\"_cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"_cva.disabled\"\n [ngModel]=\"_inputText()\"\n (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n [placeholder]=\"_cva.placeholder\"\n (focus)=\"_cva.onTouched()\"\n (blur)=\"!mobile() && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"_cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [byline]=\"byline()\"\n [selection]=\"byline()\"\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"_cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile() && maxHeight()\"\n [style.min-width.px]=\"!mobile() && minWidth\"\n [style.max-width.px]=\"autoResize() && maxWidth\"\n [attr.aria-labelledby]=\"_cva.id + '-search'\"\n aria-multiselectable=\"true\"\n [tabindex]=\"0\"\n (keydown.tab)=\"close()\"\n (keydown.shift.tab)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n @if (!!_cva.stateMessage) {\n <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n }\n @if (showSelectAll()) {\n <fd-multi-combobox-select-all-toggler\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange$\"\n [selectedItems]=\"_selectedSuggestions()\"\n [flatItems]=\"_flatSuggestions()\"\n ></fd-multi-combobox-select-all-toggler>\n }\n <ng-content></ng-content>\n @if (isGroup()) {\n @for (group of _suggestions(); track group.label; let groupIndex = $index) {\n @if (!groupItemTemplate) {\n <li\n fd-list-item\n fd-list-group-header\n ariaRole=\"group\"\n [attr.aria-roledescription]=\"('coreMultiComboBox.listGroupHeader' | fdTranslate)()\"\n [attr.aria-owns]=\"_getGroupItemIds(groupIndex)\"\n [attr.aria-label]=\"group.label\"\n >\n <span fd-list-title>{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem.id; let i = $index) {\n <li\n fd-list-item\n #item=\"fdListItem\"\n role=\"option\"\n (click)=\"!mobile() && _onOptionClicked($event, i)\"\n (keydown)=\"_onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n [attr.id-with-group-index]=\"item.id + '-group-' + groupIndex\"\n [attr.aria-setsize]=\"group.children?.length\"\n [attr.aria-posinset]=\"i + 1\"\n >\n <fd-checkbox\n role=\"presentation\"\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions(); track optionItem.id; let i = $index) {\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile() && _onOptionClicked($event, i)\"\n (keydown)=\"_onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n role=\"presentation\"\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (optionItem.selected && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(optionItem.selected && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight: _inputText()\"\n fdTruncatedTitle\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText()) {\n @if (!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 } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n", styles: [".fd-margin--tiny{margin-block:.5rem;margin-inline:.5rem}.fd-margin--sm{margin-block:1rem;margin-inline:1rem}.fd-margin--md{margin-block:2rem;margin-inline:2rem}.fd-margin--lg{margin-block:3rem;margin-inline:3rem}.fd-margin--none{margin-block:0;margin-inline:0}.fd-margin-top--tiny{-webkit-margin-before:.5rem;margin-block-start:.5rem}.fd-margin-top--sm{-webkit-margin-before:1rem;margin-block-start:1rem}.fd-margin-top--md{-webkit-margin-before:2rem;margin-block-start:2rem}.fd-margin-top--lg{-webkit-margin-before:3rem;margin-block-start:3rem}.fd-margin-top--none{-webkit-margin-before:0;margin-block-start:0}.fd-margin-end--tiny{-webkit-margin-end:.5rem;margin-inline-end:.5rem}.fd-margin-end--sm{-webkit-margin-end:1rem;margin-inline-end:1rem}.fd-margin-end--md{-webkit-margin-end:2rem;margin-inline-end:2rem}.fd-margin-end--lg{-webkit-margin-end:3rem;margin-inline-end:3rem}.fd-margin-end--none{-webkit-margin-end:0;margin-inline-end:0}.fd-margin-bottom--tiny{-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-margin-bottom--sm{-webkit-margin-after:1rem;margin-block-end:1rem}.fd-margin-bottom--md{-webkit-margin-after:2rem;margin-block-end:2rem}.fd-margin-bottom--lg{-webkit-margin-after:3rem;margin-block-end:3rem}.fd-margin-bottom--none{-webkit-margin-after:0;margin-block-end:0}.fd-margin-begin--tiny{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-margin-begin--sm{-webkit-margin-start:1rem;margin-inline-start:1rem}.fd-margin-begin--md{-webkit-margin-start:2rem;margin-inline-start:2rem}.fd-margin-begin--lg{-webkit-margin-start:3rem;margin-inline-start:3rem}.fd-margin-begin--none{-webkit-margin-start:0;margin-inline-start:0}.fd-margin-top-bottom--tiny{margin-block:.5rem}.fd-margin-top-bottom--sm{margin-block:1rem}.fd-margin-top-bottom--md{margin-block:2rem}.fd-margin-top-bottom--lg{margin-block:3rem}.fd-margin-begin-end--tiny{margin-inline:.5rem}.fd-margin-begin-end--sm{margin-inline:1rem}.fd-margin-begin-end--md{margin-inline:2rem}.fd-margin-begin-end--lg{margin-inline:3rem}.fd-margin-responsive--sm{margin-block:0 1rem;margin-inline:0}.fd-margin-responsive--md{margin-block:1rem;margin-inline:1rem}.fd-margin-responsive--lg{margin-block:1rem;margin-inline:2rem}.fd-margin-responsive--xl{margin-block:1rem;margin-inline:3rem}.fd-margin-negative-begin-end--tiny{margin-block:0;margin-inline:-.5rem}.fd-margin-negative-begin-end--sm{margin-block:0;margin-inline:-1rem}.fd-margin-negative-begin-end--md{margin-block:0;margin-inline:-2rem}.fd-margin-negative-begin-end--lg{margin-block:0;margin-inline:-3rem}.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{max-width:100%;border-radius:0!important}.fd-multi-combobox__list fd-form-message{position:relative;z-index:10}\n/*! Bundled license information:\n\nfundamental-styles/dist/margins.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight", "ariaModal"], outputs: ["onClose"] }, { kind: "component", type: FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen", "preventSpaceKeyScroll"], outputs: ["isOpenChange"] }, { kind: "component", type: InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy", "ariaLabel"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "glyphFont", "moreTerm", "open", "showOverflowPopover", "externalHiddenCount"], outputs: ["moreClickedEvent"] }, { kind: "component", type: TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused", "selectedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "displayFn", "matcher"], outputs: ["onComplete"] }, { kind: "component", type: FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["id", "type", "static", "valueStateMessage", "embedded"] }, { kind: "component", type: ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "subline", "theme", "unreadIndicator", "role", "settingsList", "settingsListFooter", "searchResultsList"], outputs: ["focusEscapeList"] }, { kind: "component", type: SelectAllTogglerComponent, selector: "fd-multi-combobox-select-all-toggler", inputs: ["selectAllHandler", "valueChanges", "selectedItems", "flatItems"] }, { kind: "directive", type: ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap", "truncate", "scope"] }, { kind: "component", type: ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "counterRole", "counterAriaLabel", "active", "unread", "byline", "ariaRole", "id", "preventClick", "settingsListTpl", "suggestion"], outputs: ["keyDown"], exportAs: ["fdListItem"] }, { kind: "component", type: CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "readonly", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "directive", type: ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: MultiAnnouncerDirective, selector: "[fdMultiAnnouncer]", inputs: ["multiAnnouncerOptions"], exportAs: ["fdMultiAnnouncer"] }, { kind: "directive", type: TruncatedTitleDirective, selector: "[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: SearchHighlightPipe, name: "highlight" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1819
|
+
], queries: [{ propertyName: "customTemplates", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true, isSignal: true }, { propertyName: "listComponent", first: true, predicate: FD_LIST_COMPONENT, descendants: true, isSignal: true }, { propertyName: "mobileControlTemplate", first: true, predicate: ["mobileControlTemplate"], descendants: true, isSignal: true }, { propertyName: "listTemplate", first: true, predicate: ["listTemplate"], descendants: true, isSignal: true }, { propertyName: "_tokenizer", first: true, predicate: TokenizerComponent, descendants: true, isSignal: true }, { propertyName: "_inputGroup", first: true, predicate: ["inputGroup"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "items", predicate: ["item"], descendants: true, read: ElementRef, isSignal: true }], 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 @if (mobile()) {\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n } @else {\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"_cva.disabled\"\n [maxWidth]=\"_popoverMaxWidth\"\n [fillControlMode]=\"fillControlMode()\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize() && 100\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n }\n</div>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"_cva.id + '-input-group-container'\"\n [state]=\"_cva.state\"\n [buttonFocusable]=\"buttonFocusable()\"\n [button]=\"!_cva.readonly\"\n [glyph]=\"!_cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"_cva.disabled || _cva.readonly\"\n [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [glyphAriaLabel]=\"_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 [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n [showOverflowPopover]=\"false\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n fdMultiAnnouncer\n [multiAnnouncerOptions]=\"_suggestions()\"\n >\n @for (token of _selectedSuggestions(); track token.id) {\n <fd-token [readOnly]=\"_cva.disabled\" (onCloseClick)=\"_removeToken(token, $event)\">\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 [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"_cva.id\"\n [name]=\"_cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"_cva.disabled\"\n [ngModel]=\"_inputText()\"\n (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n [attr.placeholder]=\"_selectedSuggestions().length ? null : _cva.placeholder\"\n (focus)=\"tokenizer._showAllTokens()\"\n (blur)=\"!mobile() && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"_cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [attr.aria-required]=\"_cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input fd-input-group__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n @if (mobile() && isOpen ? false : !!_cva.stateMessage) {\n <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"_cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"_cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"_cva.disabled || _cva.readonly\"\n [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [glyphAriaLabel]=\"_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 [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"_cva.id\"\n [name]=\"_cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"_cva.disabled\"\n [ngModel]=\"_inputText()\"\n (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n [placeholder]=\"_cva.placeholder\"\n (focus)=\"_cva.onTouched()\"\n (blur)=\"!mobile() && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"_cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [byline]=\"byline()\"\n [selection]=\"byline()\"\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"_cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile() && maxHeight()\"\n [style.min-width.px]=\"!mobile() && minWidth\"\n [style.max-width.px]=\"autoResize() && maxWidth\"\n [attr.aria-labelledby]=\"_cva.id + '-search'\"\n aria-multiselectable=\"true\"\n [tabindex]=\"0\"\n (keydown.tab)=\"close()\"\n (keydown.shift.tab)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n @if (!!_cva.stateMessage) {\n <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n }\n @if (showSelectAll()) {\n <fd-multi-combobox-select-all-toggler\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange$\"\n [selectedItems]=\"_selectedSuggestions()\"\n [flatItems]=\"_flatSuggestions()\"\n ></fd-multi-combobox-select-all-toggler>\n }\n <ng-content></ng-content>\n @if (isGroup()) {\n @for (group of _suggestions(); track group.label; let groupIndex = $index) {\n @if (!groupItemTemplate) {\n <li\n fd-list-item\n fd-list-group-header\n ariaRole=\"group\"\n [attr.aria-roledescription]=\"('coreMultiComboBox.listGroupHeader' | fdTranslate)()\"\n [attr.aria-owns]=\"_getGroupItemIds(groupIndex)\"\n [attr.aria-label]=\"group.label\"\n >\n <span fd-list-title>{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem.id; let i = $index) {\n <li\n fd-list-item\n #item=\"fdListItem\"\n role=\"option\"\n (click)=\"!mobile() && _onOptionClicked($event, i)\"\n (keydown)=\"_onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n [attr.id-with-group-index]=\"item.id + '-group-' + groupIndex\"\n [attr.aria-setsize]=\"group.children?.length\"\n [attr.aria-posinset]=\"i + 1\"\n >\n <fd-checkbox\n role=\"presentation\"\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions(); track optionItem.id; let i = $index) {\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile() && _onOptionClicked($event, i)\"\n (keydown)=\"_onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n role=\"presentation\"\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (optionItem.selected && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(optionItem.selected && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight: _inputText()\"\n fdTruncatedTitle\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText()) {\n @if (!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 } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n", styles: [".fd-margin--tiny{margin-block:.5rem;margin-inline:.5rem}.fd-margin--sm{margin-block:1rem;margin-inline:1rem}.fd-margin--md{margin-block:2rem;margin-inline:2rem}.fd-margin--lg{margin-block:3rem;margin-inline:3rem}.fd-margin--none{margin-block:0;margin-inline:0}.fd-margin-top--tiny{-webkit-margin-before:.5rem;margin-block-start:.5rem}.fd-margin-top--sm{-webkit-margin-before:1rem;margin-block-start:1rem}.fd-margin-top--md{-webkit-margin-before:2rem;margin-block-start:2rem}.fd-margin-top--lg{-webkit-margin-before:3rem;margin-block-start:3rem}.fd-margin-top--none{-webkit-margin-before:0;margin-block-start:0}.fd-margin-end--tiny{-webkit-margin-end:.5rem;margin-inline-end:.5rem}.fd-margin-end--sm{-webkit-margin-end:1rem;margin-inline-end:1rem}.fd-margin-end--md{-webkit-margin-end:2rem;margin-inline-end:2rem}.fd-margin-end--lg{-webkit-margin-end:3rem;margin-inline-end:3rem}.fd-margin-end--none{-webkit-margin-end:0;margin-inline-end:0}.fd-margin-bottom--tiny{-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-margin-bottom--sm{-webkit-margin-after:1rem;margin-block-end:1rem}.fd-margin-bottom--md{-webkit-margin-after:2rem;margin-block-end:2rem}.fd-margin-bottom--lg{-webkit-margin-after:3rem;margin-block-end:3rem}.fd-margin-bottom--none{-webkit-margin-after:0;margin-block-end:0}.fd-margin-begin--tiny{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-margin-begin--sm{-webkit-margin-start:1rem;margin-inline-start:1rem}.fd-margin-begin--md{-webkit-margin-start:2rem;margin-inline-start:2rem}.fd-margin-begin--lg{-webkit-margin-start:3rem;margin-inline-start:3rem}.fd-margin-begin--none{-webkit-margin-start:0;margin-inline-start:0}.fd-margin-top-bottom--tiny{margin-block:.5rem}.fd-margin-top-bottom--sm{margin-block:1rem}.fd-margin-top-bottom--md{margin-block:2rem}.fd-margin-top-bottom--lg{margin-block:3rem}.fd-margin-begin-end--tiny{margin-inline:.5rem}.fd-margin-begin-end--sm{margin-inline:1rem}.fd-margin-begin-end--md{margin-inline:2rem}.fd-margin-begin-end--lg{margin-inline:3rem}.fd-margin-responsive--sm{margin-block:0 1rem;margin-inline:0}.fd-margin-responsive--md{margin-block:1rem;margin-inline:1rem}.fd-margin-responsive--lg{margin-block:1rem;margin-inline:2rem}.fd-margin-responsive--xl{margin-block:1rem;margin-inline:3rem}.fd-margin-negative-begin-end--tiny{margin-block:0;margin-inline:-.5rem}.fd-margin-negative-begin-end--sm{margin-block:0;margin-inline:-1rem}.fd-margin-negative-begin-end--md{margin-block:0;margin-inline:-2rem}.fd-margin-negative-begin-end--lg{margin-block:0;margin-inline:-3rem}.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{max-width:100%;border-radius:0!important}.fd-multi-combobox__list fd-form-message{position:relative;z-index:10}\n/*! Bundled license information:\n\nfundamental-styles/dist/margins.css:\n (*!\n * Fundamental Library Styles v0.41.9\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["config", "title", "trigger", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll", "placement", "maxWidth", "fillControlMode", "closeOnOutsideClick", "closeOnEscapeKey", "disabled", "triggers", "focusTrapped", "focusAutoCapture", "restoreFocusOnClose", "noArrow", "disableScrollbar", "appendTo", "placementContainer", "scrollStrategy", "cdkPositions", "applyOverlay", "additionalBodyClass", "additionalTriggerClass", "closeOnNavigation", "fixedPosition", "resizable", "bodyAriaLabel", "bodyRole", "bodyAriaLabelledBy", "isOpen"], outputs: ["triggerChange", "isOpenChange", "beforeOpen"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight", "ariaModal"], outputs: ["onClose"] }, { kind: "component", type: FormInputMessageGroupComponent, selector: "fd-form-input-message-group", inputs: ["triggers", "closeOnOutsideClick", "fillControlMode", "noArrow", "closeOnEscapeKey", "placement", "placementContainer", "isOpen", "preventSpaceKeyScroll"], outputs: ["isOpenChange"] }, { kind: "component", type: InputGroupComponent, selector: "fd-input-group", inputs: ["placement", "required", "inline", "addOnText", "buttonFocusable", "type", "glyph", "glyphFont", "button", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "addonButtonAriaHidden", "iconTitle", "ariaLabelledBy", "ariaLabel"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: TokenizerComponent, selector: "fd-tokenizer", inputs: ["class", "disableKeyboardDeletion", "compactCollapse", "tokenizerFocusable", "inputValue", "glyph", "glyphFont", "moreTerm", "open", "showOverflowPopover", "externalHiddenCount"], outputs: ["moreClickedEvent"] }, { kind: "component", type: TokenComponent, selector: "fd-token", inputs: ["disabled", "selected", "readOnly"], outputs: ["onCloseClick", "onRemove", "onTokenClick", "onTokenKeydown", "elementFocused", "selectedChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AutoCompleteDirective, selector: "[fdkAutoComplete]", inputs: ["options", "inputText", "enable", "displayFn", "matcher"], outputs: ["onComplete"] }, { kind: "component", type: FormControlComponent, selector: "input[fd-form-control], textarea[fd-form-control]", inputs: ["state", "type", "class", "ariaLabel", "ariaLabelledBy"] }, { kind: "directive", type: InputGroupInputDirective, selector: "[fdInputGroupInput], [fd-input-group-input]", inputs: ["class"] }, { kind: "component", type: FormMessageComponent, selector: "fd-form-message", inputs: ["id", "type", "static", "valueStateMessage", "embedded"] }, { kind: "component", type: ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "subline", "theme", "unreadIndicator", "role", "settingsList", "settingsListFooter", "notification", "searchResultsList"], outputs: ["focusEscapeList"] }, { kind: "component", type: SelectAllTogglerComponent, selector: "fd-multi-combobox-select-all-toggler", inputs: ["selectAllHandler", "valueChanges", "selectedItems", "flatItems"] }, { kind: "directive", type: ListGroupHeaderDirective, selector: "[fdListGroupHeader], [fd-list-group-header]", inputs: ["nativeElementId"], outputs: ["keyDown"] }, { kind: "directive", type: ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap", "truncate", "scope"] }, { kind: "component", type: ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "counterRole", "counterAriaLabel", "active", "unread", "byline", "ariaRole", "id", "preventClick", "settingsListTpl", "suggestion"], outputs: ["keyDown"], exportAs: ["fdListItem"] }, { kind: "component", type: CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "readonly", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "directive", type: ListSecondaryDirective, selector: "[fd-list-secondary], [fdListSecondary]", inputs: ["type"] }, { kind: "directive", type: MultiAnnouncerDirective, selector: "[fdMultiAnnouncer]", inputs: ["multiAnnouncerOptions"], exportAs: ["fdMultiAnnouncer"] }, { kind: "directive", type: TruncatedTitleDirective, selector: "[fdkTruncatedTitle], [fdTruncatedTitle], [fd-truncate-title]" }, { kind: "pipe", type: FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: SearchHighlightPipe, name: "highlight" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
1804
1820
|
}
|
|
1805
1821
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: MultiComboboxComponent, decorators: [{
|
|
1806
1822
|
type: Component,
|
|
@@ -1852,7 +1868,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
1852
1868
|
SearchHighlightPipe,
|
|
1853
1869
|
MultiAnnouncerDirective,
|
|
1854
1870
|
TruncatedTitleDirective
|
|
1855
|
-
], template: "<div class=\"fd-multi-combobox\">\n @if (mobile()) {\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n } @else {\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"_cva.disabled\"\n [maxWidth]=\"_popoverMaxWidth\"\n [fillControlMode]=\"fillControlMode()\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize() && 100\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n }\n</div>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"_cva.id + '-input-group-container'\"\n [state]=\"_cva.state\"\n [buttonFocusable]=\"buttonFocusable()\"\n [button]=\"!_cva.readonly\"\n [glyph]=\"!_cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"_cva.disabled || _cva.readonly\"\n [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [glyphAriaLabel]=\"_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 [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n [showOverflowPopover]=\"false\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n fdMultiAnnouncer\n [multiAnnouncerOptions]=\"_suggestions()\"\n >\n @for (token of _selectedSuggestions(); track token.id) {\n <fd-token [readOnly]=\"_cva.disabled\" (onCloseClick)=\"_removeToken(token, $event)\">\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 [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"_cva.id\"\n [name]=\"_cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"_cva.disabled\"\n [ngModel]=\"_inputText()\"\n (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n [attr.placeholder]=\"_selectedSuggestions().length ? null : _cva.placeholder\"\n (focus)=\"tokenizer._showAllTokens()\"\n (blur)=\"!mobile() && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"_cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [attr.aria-required]=\"_cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input fd-input-group__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n @if (mobile() && isOpen ? false : !!_cva.stateMessage) {\n <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"_cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"_cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"_cva.disabled || _cva.readonly\"\n [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [glyphAriaLabel]=\"_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 [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"_cva.id\"\n [name]=\"_cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"_cva.disabled\"\n [ngModel]=\"_inputText()\"\n (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n [placeholder]=\"_cva.placeholder\"\n (focus)=\"_cva.onTouched()\"\n (blur)=\"!mobile() && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"_cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [byline]=\"byline()\"\n [selection]=\"byline()\"\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"_cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile() && maxHeight()\"\n [style.min-width.px]=\"!mobile() && minWidth\"\n [style.max-width.px]=\"autoResize() && maxWidth\"\n [attr.aria-labelledby]=\"_cva.id + '-search'\"\n aria-multiselectable=\"true\"\n [tabindex]=\"0\"\n (keydown.tab)=\"close()\"\n (keydown.shift.tab)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n @if (!!_cva.stateMessage) {\n <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n }\n @if (showSelectAll()) {\n <fd-multi-combobox-select-all-toggler\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange$\"\n [selectedItems]=\"_selectedSuggestions()\"\n [flatItems]=\"_flatSuggestions()\"\n ></fd-multi-combobox-select-all-toggler>\n }\n <ng-content></ng-content>\n @if (isGroup()) {\n @for (group of _suggestions(); track group.label; let groupIndex = $index) {\n @if (!groupItemTemplate) {\n <li\n fd-list-item\n fd-list-group-header\n ariaRole=\"group\"\n [attr.aria-roledescription]=\"('coreMultiComboBox.listGroupHeader' | fdTranslate)()\"\n [attr.aria-owns]=\"_getGroupItemIds(groupIndex)\"\n [attr.aria-label]=\"group.label\"\n >\n <span fd-list-title>{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem.id; let i = $index) {\n <li\n fd-list-item\n #item=\"fdListItem\"\n role=\"option\"\n (click)=\"!mobile() && _onOptionClicked($event, i)\"\n (keydown)=\"_onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n [attr.id-with-group-index]=\"item.id + '-group-' + groupIndex\"\n [attr.aria-setsize]=\"group.children?.length\"\n [attr.aria-posinset]=\"i + 1\"\n >\n <fd-checkbox\n role=\"presentation\"\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions(); track optionItem.id; let i = $index) {\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile() && _onOptionClicked($event, i)\"\n (keydown)=\"_onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n role=\"presentation\"\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (optionItem.selected && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(optionItem.selected && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight: _inputText()\"\n fdTruncatedTitle\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText()) {\n @if (!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 } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n", styles: [".fd-margin--tiny{margin-block:.5rem;margin-inline:.5rem}.fd-margin--sm{margin-block:1rem;margin-inline:1rem}.fd-margin--md{margin-block:2rem;margin-inline:2rem}.fd-margin--lg{margin-block:3rem;margin-inline:3rem}.fd-margin--none{margin-block:0;margin-inline:0}.fd-margin-top--tiny{-webkit-margin-before:.5rem;margin-block-start:.5rem}.fd-margin-top--sm{-webkit-margin-before:1rem;margin-block-start:1rem}.fd-margin-top--md{-webkit-margin-before:2rem;margin-block-start:2rem}.fd-margin-top--lg{-webkit-margin-before:3rem;margin-block-start:3rem}.fd-margin-top--none{-webkit-margin-before:0;margin-block-start:0}.fd-margin-end--tiny{-webkit-margin-end:.5rem;margin-inline-end:.5rem}.fd-margin-end--sm{-webkit-margin-end:1rem;margin-inline-end:1rem}.fd-margin-end--md{-webkit-margin-end:2rem;margin-inline-end:2rem}.fd-margin-end--lg{-webkit-margin-end:3rem;margin-inline-end:3rem}.fd-margin-end--none{-webkit-margin-end:0;margin-inline-end:0}.fd-margin-bottom--tiny{-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-margin-bottom--sm{-webkit-margin-after:1rem;margin-block-end:1rem}.fd-margin-bottom--md{-webkit-margin-after:2rem;margin-block-end:2rem}.fd-margin-bottom--lg{-webkit-margin-after:3rem;margin-block-end:3rem}.fd-margin-bottom--none{-webkit-margin-after:0;margin-block-end:0}.fd-margin-begin--tiny{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-margin-begin--sm{-webkit-margin-start:1rem;margin-inline-start:1rem}.fd-margin-begin--md{-webkit-margin-start:2rem;margin-inline-start:2rem}.fd-margin-begin--lg{-webkit-margin-start:3rem;margin-inline-start:3rem}.fd-margin-begin--none{-webkit-margin-start:0;margin-inline-start:0}.fd-margin-top-bottom--tiny{margin-block:.5rem}.fd-margin-top-bottom--sm{margin-block:1rem}.fd-margin-top-bottom--md{margin-block:2rem}.fd-margin-top-bottom--lg{margin-block:3rem}.fd-margin-begin-end--tiny{margin-inline:.5rem}.fd-margin-begin-end--sm{margin-inline:1rem}.fd-margin-begin-end--md{margin-inline:2rem}.fd-margin-begin-end--lg{margin-inline:3rem}.fd-margin-responsive--sm{margin-block:0 1rem;margin-inline:0}.fd-margin-responsive--md{margin-block:1rem;margin-inline:1rem}.fd-margin-responsive--lg{margin-block:1rem;margin-inline:2rem}.fd-margin-responsive--xl{margin-block:1rem;margin-inline:3rem}.fd-margin-negative-begin-end--tiny{margin-block:0;margin-inline:-.5rem}.fd-margin-negative-begin-end--sm{margin-block:0;margin-inline:-1rem}.fd-margin-negative-begin-end--md{margin-block:0;margin-inline:-2rem}.fd-margin-negative-begin-end--lg{margin-block:0;margin-inline:-3rem}.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{max-width:100%;border-radius:0!important}.fd-multi-combobox__list fd-form-message{position:relative;z-index:10}\n/*! Bundled license information:\n\nfundamental-styles/dist/margins.css:\n (*!\n * Fundamental Library Styles v0.41.8\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
|
|
1871
|
+
], template: "<div class=\"fd-multi-combobox\">\n @if (mobile()) {\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n } @else {\n <fd-popover\n additionalBodyClass=\"fd-popover-custom-list fd-multi-combobox__list-container\"\n (isOpenChange)=\"_popoverOpenChangeHandle($event)\"\n [isOpen]=\"isOpen\"\n [triggers]=\"[]\"\n [disabled]=\"_cva.disabled\"\n [maxWidth]=\"_popoverMaxWidth\"\n [fillControlMode]=\"fillControlMode()\"\n >\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"controlTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body [style.width.%]=\"!autoResize() && 100\">\n <ng-template [ngTemplateOutlet]=\"listTemplate\"></ng-template>\n <ng-content></ng-content>\n </fd-popover-body>\n </fd-popover>\n }\n</div>\n<ng-template #controlTemplate>\n <fd-form-input-message-group>\n <fd-input-group\n #inputGroup\n [id]=\"_cva.id + '-input-group-container'\"\n [state]=\"_cva.state\"\n [buttonFocusable]=\"buttonFocusable()\"\n [button]=\"!_cva.readonly\"\n [glyph]=\"!_cva.readonly ? 'navigation-down-arrow' : ' '\"\n [isControl]=\"true\"\n [disabled]=\"_cva.disabled || _cva.readonly\"\n [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [glyphAriaLabel]=\"_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 [tokenizerFocusable]=\"false\"\n [compactCollapse]=\"true\"\n [showOverflowPopover]=\"false\"\n #tokenizer\n class=\"fd-multi-combobox-tokenizer-custom\"\n (moreClickedEvent)=\"_moreClicked()\"\n fdMultiAnnouncer\n [multiAnnouncerOptions]=\"_suggestions()\"\n >\n @for (token of _selectedSuggestions(); track token.id) {\n <fd-token [readOnly]=\"_cva.disabled\" (onCloseClick)=\"_removeToken(token, $event)\">\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 [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"_cva.id\"\n [name]=\"_cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"_cva.disabled\"\n [ngModel]=\"_inputText()\"\n (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n [attr.placeholder]=\"_selectedSuggestions().length ? null : _cva.placeholder\"\n (focus)=\"tokenizer._showAllTokens()\"\n (blur)=\"!mobile() && _onBlur($event); tokenizer._hideTokens()\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"_cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [attr.aria-required]=\"_cva.required\"\n [displayFn]=\"_displayFn\"\n class=\"fd-tokenizer__input fd-input-group__input\"\n />\n </fd-tokenizer>\n </fd-input-group>\n @if (mobile() && isOpen ? false : !!_cva.stateMessage) {\n <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n }\n </fd-form-input-message-group>\n</ng-template>\n<ng-template #mobileControlTemplate>\n <fd-input-group\n [id]=\"_cva.id + '-input-group-container'\"\n class=\"fd-multi-combobox-input-group-custom\"\n [state]=\"_cva.state\"\n [buttonFocusable]=\"false\"\n [isControl]=\"true\"\n [disabled]=\"_cva.disabled || _cva.readonly\"\n [isExpanded]=\"!mobile() && isOpen && _suggestions().length > 0\"\n [attr.aria-disabled]=\"_cva.disabled || _cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [glyphAriaLabel]=\"_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 [ariaLabel]=\"('coreMultiComboBox.multiComboBoxAriaLabel' | fdTranslate)()\"\n [attr.aria-labelledby]=\"_cva.ariaLabelledBy\"\n [attr.aria-autocomplete]=\"autoComplete() && !mobile() ? 'list' : null\"\n [attr.aria-owns]=\"autoComplete() && !mobile() ? _cva.id + '-result' : null\"\n [attr.aria-haspopup]=\"autoComplete() && !mobile()\"\n fd-form-control\n fd-input-group-input\n tabindex=\"0\"\n [id]=\"_cva.id\"\n [name]=\"_cva.name\"\n (keydown)=\"_onInputKeydownHandler($event)\"\n [disabled]=\"_cva.disabled\"\n [ngModel]=\"_inputText()\"\n (ngModelChange)=\"_setInputText($event); _searchTermChanged()\"\n [placeholder]=\"_cva.placeholder\"\n (focus)=\"_cva.onTouched()\"\n (blur)=\"!mobile() && _onBlur($event)\"\n [attr.aria-expanded]=\"isOpen\"\n [readonly]=\"_cva.readonly\"\n [attr.aria-readonly]=\"_cva.readonly\"\n [displayFn]=\"_displayFn\"\n />\n </fd-input-group>\n</ng-template>\n<ng-template #listTemplate>\n <ul\n fd-list\n [byline]=\"byline()\"\n [selection]=\"byline()\"\n (focusEscapeList)=\"_handleListFocusEscape($event)\"\n class=\"fd-multi-combobox__list fd-list--multi-input\"\n [id]=\"_cva.id + '-result'\"\n role=\"listbox\"\n [style.max-height]=\"!mobile() && maxHeight()\"\n [style.min-width.px]=\"!mobile() && minWidth\"\n [style.max-width.px]=\"autoResize() && maxWidth\"\n [attr.aria-labelledby]=\"_cva.id + '-search'\"\n aria-multiselectable=\"true\"\n [tabindex]=\"0\"\n (keydown.tab)=\"close()\"\n (keydown.shift.tab)=\"close()\"\n (keydown.escape)=\"close()\"\n >\n @if (!!_cva.stateMessage) {\n <fd-form-message [type]=\"_cva.state\" [innerHtml]=\"_cva.stateMessage\"></fd-form-message>\n }\n @if (showSelectAll()) {\n <fd-multi-combobox-select-all-toggler\n [selectAllHandler]=\"_handleSelectAllItems\"\n [valueChanges]=\"selectionChange$\"\n [selectedItems]=\"_selectedSuggestions()\"\n [flatItems]=\"_flatSuggestions()\"\n ></fd-multi-combobox-select-all-toggler>\n }\n <ng-content></ng-content>\n @if (isGroup()) {\n @for (group of _suggestions(); track group.label; let groupIndex = $index) {\n @if (!groupItemTemplate) {\n <li\n fd-list-item\n fd-list-group-header\n ariaRole=\"group\"\n [attr.aria-roledescription]=\"('coreMultiComboBox.listGroupHeader' | fdTranslate)()\"\n [attr.aria-owns]=\"_getGroupItemIds(groupIndex)\"\n [attr.aria-label]=\"group.label\"\n >\n <span fd-list-title>{{ group.label }}</span>\n </li>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"groupItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: group.label } }\"\n ></ng-template>\n }\n @for (optionItem of group.children; track optionItem.id; let i = $index) {\n <li\n fd-list-item\n #item=\"fdListItem\"\n role=\"option\"\n (click)=\"!mobile() && _onOptionClicked($event, i)\"\n (keydown)=\"_onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n [attr.id-with-group-index]=\"item.id + '-group-' + groupIndex\"\n [attr.aria-setsize]=\"group.children?.length\"\n [attr.aria-posinset]=\"i + 1\"\n >\n <fd-checkbox\n role=\"presentation\"\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n } @else {\n @for (optionItem of _suggestions(); track optionItem.id; let i = $index) {\n <li\n fd-list-item\n role=\"option\"\n [tabindex]=\"0\"\n (click)=\"!mobile() && _onOptionClicked($event, i)\"\n (keydown)=\"_onItemKeyDownHandler($event)\"\n [selected]=\"!!optionItem.selected\"\n >\n <fd-checkbox\n role=\"presentation\"\n (click)=\"_onOptionCheckboxClicked($event, i)\"\n (ngModelChange)=\"_toggleSelection(optionItem)\"\n [ngModel]=\"optionItem.selected\"\n >\n </fd-checkbox>\n <ng-template\n [ngTemplateOutlet]=\"listItem\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: i }\"\n ></ng-template>\n </li>\n }\n }\n </ul>\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #listItem>\n @if (optionItem.selected && !!selectedItemTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n @if (!(optionItem.selected && selectedItemTemplate)) {\n <ng-template\n [ngTemplateOutlet]=\"optionItemSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem, index: index }\"\n ></ng-template>\n <ng-template\n [ngTemplateOutlet]=\"secondaryTextSource\"\n [ngTemplateOutletContext]=\"{ optionItem: optionItem }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" let-index=\"index\" #optionItemSource>\n @if (!optionItemTemplate) {\n <span\n fd-list-title\n [attr.title]=\"optionItem.label\"\n [innerHTML]=\"optionItem.label | highlight: _inputText()\"\n fdTruncatedTitle\n ></span>\n } @else {\n <ng-template\n [ngTemplateOutlet]=\"optionItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value, index: index }\"\n ></ng-template>\n }\n</ng-template>\n<ng-template let-optionItem=\"optionItem\" #secondaryTextSource>\n @if (showSecondaryText()) {\n @if (!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 } @else {\n <ng-template\n [ngTemplateOutlet]=\"secondaryItemTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: optionItem.value }\"\n ></ng-template>\n }\n }\n</ng-template>\n", styles: [".fd-margin--tiny{margin-block:.5rem;margin-inline:.5rem}.fd-margin--sm{margin-block:1rem;margin-inline:1rem}.fd-margin--md{margin-block:2rem;margin-inline:2rem}.fd-margin--lg{margin-block:3rem;margin-inline:3rem}.fd-margin--none{margin-block:0;margin-inline:0}.fd-margin-top--tiny{-webkit-margin-before:.5rem;margin-block-start:.5rem}.fd-margin-top--sm{-webkit-margin-before:1rem;margin-block-start:1rem}.fd-margin-top--md{-webkit-margin-before:2rem;margin-block-start:2rem}.fd-margin-top--lg{-webkit-margin-before:3rem;margin-block-start:3rem}.fd-margin-top--none{-webkit-margin-before:0;margin-block-start:0}.fd-margin-end--tiny{-webkit-margin-end:.5rem;margin-inline-end:.5rem}.fd-margin-end--sm{-webkit-margin-end:1rem;margin-inline-end:1rem}.fd-margin-end--md{-webkit-margin-end:2rem;margin-inline-end:2rem}.fd-margin-end--lg{-webkit-margin-end:3rem;margin-inline-end:3rem}.fd-margin-end--none{-webkit-margin-end:0;margin-inline-end:0}.fd-margin-bottom--tiny{-webkit-margin-after:.5rem;margin-block-end:.5rem}.fd-margin-bottom--sm{-webkit-margin-after:1rem;margin-block-end:1rem}.fd-margin-bottom--md{-webkit-margin-after:2rem;margin-block-end:2rem}.fd-margin-bottom--lg{-webkit-margin-after:3rem;margin-block-end:3rem}.fd-margin-bottom--none{-webkit-margin-after:0;margin-block-end:0}.fd-margin-begin--tiny{-webkit-margin-start:.5rem;margin-inline-start:.5rem}.fd-margin-begin--sm{-webkit-margin-start:1rem;margin-inline-start:1rem}.fd-margin-begin--md{-webkit-margin-start:2rem;margin-inline-start:2rem}.fd-margin-begin--lg{-webkit-margin-start:3rem;margin-inline-start:3rem}.fd-margin-begin--none{-webkit-margin-start:0;margin-inline-start:0}.fd-margin-top-bottom--tiny{margin-block:.5rem}.fd-margin-top-bottom--sm{margin-block:1rem}.fd-margin-top-bottom--md{margin-block:2rem}.fd-margin-top-bottom--lg{margin-block:3rem}.fd-margin-begin-end--tiny{margin-inline:.5rem}.fd-margin-begin-end--sm{margin-inline:1rem}.fd-margin-begin-end--md{margin-inline:2rem}.fd-margin-begin-end--lg{margin-inline:3rem}.fd-margin-responsive--sm{margin-block:0 1rem;margin-inline:0}.fd-margin-responsive--md{margin-block:1rem;margin-inline:1rem}.fd-margin-responsive--lg{margin-block:1rem;margin-inline:2rem}.fd-margin-responsive--xl{margin-block:1rem;margin-inline:3rem}.fd-margin-negative-begin-end--tiny{margin-block:0;margin-inline:-.5rem}.fd-margin-negative-begin-end--sm{margin-block:0;margin-inline:-1rem}.fd-margin-negative-begin-end--md{margin-block:0;margin-inline:-2rem}.fd-margin-negative-begin-end--lg{margin-block:0;margin-inline:-3rem}.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{max-width:100%;border-radius:0!important}.fd-multi-combobox__list fd-form-message{position:relative;z-index:10}\n/*! Bundled license information:\n\nfundamental-styles/dist/margins.css:\n (*!\n * Fundamental Library Styles v0.41.9\n * Copyright (c) 2026 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n *)\n*/\n"] }]
|
|
1856
1872
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i1.DynamicComponentService }, { type: i1.FocusTrapService }], propDecorators: { mobileConfig: [{
|
|
1857
1873
|
type: Input
|
|
1858
1874
|
}], selectedItems: [{
|