@coreui/angular-pro 5.7.6 → 5.7.7

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.
@@ -2008,6 +2008,20 @@ class MultiSelectComponent {
2008
2008
  * @since 4.5.11
2009
2009
  */
2010
2010
  allowCreateOptions = input(false, { ...(ngDevMode ? { debugName: "allowCreateOptions" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
2011
+ /**
2012
+ * Sets the accessible label (`aria-label`) for the button that clears the current selection. This label is read by screen readers.
2013
+ * @return string
2014
+ * @since 5.7.7
2015
+ */
2016
+ ariaCleanerLabel = input('Clear selection', /* @ts-ignore */
2017
+ ...(ngDevMode ? [{ debugName: "ariaCleanerLabel" }] : /* istanbul ignore next */ []));
2018
+ /**
2019
+ * Sets the accessible label (`aria-label`) for the indicator button that toggles the options menu. This label is read by screen readers.
2020
+ * @return string
2021
+ * @since 5.7.7
2022
+ */
2023
+ ariaIndicatorLabel = input('Toggle visibility of options menu', /* @ts-ignore */
2024
+ ...(ngDevMode ? [{ debugName: "ariaIndicatorLabel" }] : /* istanbul ignore next */ []));
2011
2025
  /**
2012
2026
  * Enables selection cleaner element
2013
2027
  * @return boolean
@@ -3054,7 +3068,7 @@ class MultiSelectComponent {
3054
3068
  this.visible.update((visible) => !visible);
3055
3069
  }
3056
3070
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: MultiSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3057
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MultiSelectComponent, isStandalone: true, selector: "c-multi-select", inputs: { allowCreateOptions: { classPropertyName: "allowCreateOptions", publicName: "allowCreateOptions", isSignal: true, isRequired: false, transformFunction: null }, cleaner: { classPropertyName: "cleaner", publicName: "cleaner", isSignal: true, isRequired: false, transformFunction: null }, clearSearchOnSelect: { classPropertyName: "clearSearchOnSelect", publicName: "clearSearchOnSelect", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null }, optionsMaxHeightInput: { classPropertyName: "optionsMaxHeightInput", publicName: "optionsMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, optionsStyle: { classPropertyName: "optionsStyle", publicName: "optionsStyle", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, resetSelectionOnOptionsChange: { classPropertyName: "resetSelectionOnOptionsChange", publicName: "resetSelectionOnOptionsChange", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, searchNoResultsLabel: { classPropertyName: "searchNoResultsLabel", publicName: "searchNoResultsLabel", isSignal: true, isRequired: false, transformFunction: null }, searchValue: { classPropertyName: "searchValue", publicName: "searchValue", isSignal: false, isRequired: false, transformFunction: null }, selectAll: { classPropertyName: "selectAll", publicName: "selectAll", isSignal: true, isRequired: false, transformFunction: null }, selectAllLabel: { classPropertyName: "selectAllLabel", publicName: "selectAllLabel", isSignal: true, isRequired: false, transformFunction: null }, selectionType: { classPropertyName: "selectionType", publicName: "selectionType", isSignal: true, isRequired: false, transformFunction: null }, selectionTypeCounterText: { classPropertyName: "selectionTypeCounterText", publicName: "selectionTypeCounterText", isSignal: true, isRequired: false, transformFunction: null }, selectionTypeCounterTextPluralMap: { classPropertyName: "selectionTypeCounterTextPluralMap", publicName: "selectionTypeCounterTextPluralMap", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: true, isRequired: false, transformFunction: null }, virtualScroller: { classPropertyName: "virtualScroller", publicName: "virtualScroller", isSignal: true, isRequired: false, transformFunction: null }, visibleItemsInput: { classPropertyName: "visibleItemsInput", publicName: "visibleItems", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, itemMinWidthInput: { classPropertyName: "itemMinWidthInput", publicName: "itemMinWidth", isSignal: true, isRequired: false, transformFunction: null }, visibleInput: { classPropertyName: "visibleInput", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, popperOptionsInput: { classPropertyName: "popperOptionsInput", publicName: "popperOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchValueChange: "searchValueChange", valueChange: "valueChange", visibleChange: "visibleChange" }, host: { listeners: { "click": "onClick($event)", "keyup": "onKeyUp($event)", "keydown": "onKeyDown($event)" }, properties: { "class": "hostClasses()", "attr.aria-multiselectable": "multiple()", "attr.aria-expanded": "visible()", "attr.aria-disabled": "disabled()", "attr.tabindex": "tabIndex" } }, providers: [
3071
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: MultiSelectComponent, isStandalone: true, selector: "c-multi-select", inputs: { allowCreateOptions: { classPropertyName: "allowCreateOptions", publicName: "allowCreateOptions", isSignal: true, isRequired: false, transformFunction: null }, ariaCleanerLabel: { classPropertyName: "ariaCleanerLabel", publicName: "ariaCleanerLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaIndicatorLabel: { classPropertyName: "ariaIndicatorLabel", publicName: "ariaIndicatorLabel", isSignal: true, isRequired: false, transformFunction: null }, cleaner: { classPropertyName: "cleaner", publicName: "cleaner", isSignal: true, isRequired: false, transformFunction: null }, clearSearchOnSelect: { classPropertyName: "clearSearchOnSelect", publicName: "clearSearchOnSelect", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: false, isRequired: false, transformFunction: null }, optionsMaxHeightInput: { classPropertyName: "optionsMaxHeightInput", publicName: "optionsMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, optionsStyle: { classPropertyName: "optionsStyle", publicName: "optionsStyle", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, resetSelectionOnOptionsChange: { classPropertyName: "resetSelectionOnOptionsChange", publicName: "resetSelectionOnOptionsChange", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, searchNoResultsLabel: { classPropertyName: "searchNoResultsLabel", publicName: "searchNoResultsLabel", isSignal: true, isRequired: false, transformFunction: null }, searchValue: { classPropertyName: "searchValue", publicName: "searchValue", isSignal: false, isRequired: false, transformFunction: null }, selectAll: { classPropertyName: "selectAll", publicName: "selectAll", isSignal: true, isRequired: false, transformFunction: null }, selectAllLabel: { classPropertyName: "selectAllLabel", publicName: "selectAllLabel", isSignal: true, isRequired: false, transformFunction: null }, selectionType: { classPropertyName: "selectionType", publicName: "selectionType", isSignal: true, isRequired: false, transformFunction: null }, selectionTypeCounterText: { classPropertyName: "selectionTypeCounterText", publicName: "selectionTypeCounterText", isSignal: true, isRequired: false, transformFunction: null }, selectionTypeCounterTextPluralMap: { classPropertyName: "selectionTypeCounterTextPluralMap", publicName: "selectionTypeCounterTextPluralMap", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: true, isRequired: false, transformFunction: null }, virtualScroller: { classPropertyName: "virtualScroller", publicName: "virtualScroller", isSignal: true, isRequired: false, transformFunction: null }, visibleItemsInput: { classPropertyName: "visibleItemsInput", publicName: "visibleItems", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, itemMinWidthInput: { classPropertyName: "itemMinWidthInput", publicName: "itemMinWidth", isSignal: true, isRequired: false, transformFunction: null }, visibleInput: { classPropertyName: "visibleInput", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, popperOptionsInput: { classPropertyName: "popperOptionsInput", publicName: "popperOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchValueChange: "searchValueChange", valueChange: "valueChange", visibleChange: "visibleChange" }, host: { listeners: { "click": "onClick($event)", "keyup": "onKeyUp($event)", "keydown": "onKeyDown($event)" }, properties: { "class": "hostClasses()", "attr.aria-multiselectable": "multiple()", "attr.aria-expanded": "visible()", "attr.aria-disabled": "disabled()", "attr.tabindex": "tabIndex" } }, providers: [
3058
3072
  I18nPluralPipe,
3059
3073
  MultiSelectService,
3060
3074
  {
@@ -3062,7 +3076,7 @@ class MultiSelectComponent {
3062
3076
  useExisting: forwardRef(() => MultiSelectComponent),
3063
3077
  multi: true
3064
3078
  }
3065
- ], queries: [{ propertyName: "multiSelectOptionsContent", predicate: MultiSelectOptionComponent, descendants: true }, { propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "optionsElementRef", first: true, predicate: ["options"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }, { propertyName: "dropdownMenu", first: true, predicate: DropdownMenuDirective, descendants: true, read: ElementRef }, { propertyName: "dropdown", first: true, predicate: DropdownComponent, descendants: true, read: ElementRef }, { propertyName: "dropdownToggle", first: true, predicate: DropdownToggleDirective, descendants: true, read: ElementRef }, { propertyName: "multiSelectOptionsView", predicate: MultiSelectOptionComponent, descendants: true }, { propertyName: "scrollViewportView", predicate: ["scrollViewport"], descendants: true }], exportAs: ["cMultiSelect"], usesOnChanges: true, ngImport: i0, template: "@let isDisabled = disabled();\n@let placeholderText = placeholder();\n@let searchOn = search();\n@let cleanerBtn = cleaner();\n@let vScroller = virtualScroller();\n@let selType = selectionType();\n@let selectedSize = optionsSelected().size;\n@let selectedOpts = selectedOptions();\n@let counterPlaceholderTxt = counterPlaceholderText();\n<c-dropdown\n #dropdown=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [class]=\"multiselectClasses()\"\n [popperOptions]=\"popperOptions()\"\n>\n <div\n #dropdownToggle=\"cDropdownToggle\"\n [caret]=\"false\"\n [disabled]=\"isDisabled\"\n cDropdownToggle\n role=\"button\"\n class=\"form-multi-select-input-group\"\n >\n <span\n [class]=\"multiselectSelectionClasses()\"\n [class.form-multi-select-selection-tags]=\"selType === 'tags' && selectedOpts.length\"\n >\n @if (selType === 'tags') {\n @for (option of optionTags(); track option.value; let i = $index) {\n <c-multi-select-tag\n (remove)=\"handleTagRemove($event)\"\n [disabled]=\"isDisabled || (option.disabled ?? false)\"\n [label]=\"option.label ?? option.value?.toString()\"\n [option]=\"option\"\n [value]=\"option.value\"\n class=\"form-multi-select-tag text-truncate\"\n tabindex=\"-1\"\n />\n }\n } @else if (selType === 'text' && !!selectedOpts.length) {\n @for (option of selectedOpts; track option.value; let i = $index, last = $last) {\n <span class=\"form-multi-select-text text-truncate\">{{ option.label }}{{ last ? '&nbsp;' : ',&nbsp;' }}</span>\n }\n }\n @if (!searchOn) {\n <span class=\"text-placeholder text-truncate\">\n {{ selectedSize === 0 ? placeholderText : counterPlaceholderTxt }}\n </span>\n } @else {\n <input\n #inputElement\n (keydown)=\"handleSearchKeyDown($event)\"\n (valueChange)=\"handleSearchValueChange($event)\"\n [attr.placeholder]=\"selectedOpts.length === 0 ? placeholderText : counterPlaceholderTxt\"\n [disabled]=\"isDisabled || !searchOn\"\n [class]=\"{ 'form-multi-select-search': true, disabled: isDisabled || !searchOn, 'text-truncate': true }\"\n [ngModel]=\"searchValue\"\n [value]=\"searchValue\"\n autocomplete=\"off\"\n cMultiSelectSearch\n size=\"2\"\n tabindex=\"{{ isDisabled ? -1 : 0 }}\"\n type=\"text\"\n />\n }\n </span>\n <div class=\"form-multi-select-buttons\">\n @if (!!cleanerBtn && selectedSize > 0 && !isDisabled) {\n <button\n (click)=\"clearAllOptions($event)\"\n [disabled]=\"isDisabled || (!isDropdownVisible() && cleanerBtn !== 'active')\"\n aria-label=\"Clear all\"\n class=\"form-multi-select-cleaner\"\n type=\"button\"\n ></button>\n }\n <button\n (click)=\"handleIndicatorClick($event)\"\n [disabled]=\"isDisabled\"\n class=\"form-multi-select-indicator\"\n type=\"button\"\n ></button>\n </div>\n </div>\n @if (!isDisabled) {\n <div\n #dropdownMenu=\"cDropdownMenu\"\n [visible]=\"dropdown.visible()\"\n cDropdownMenu\n class=\"form-multi-select-dropdown\"\n role=\"menu\"\n >\n @if (visibleOptions() && options.length > 0) {\n @if (selectAll() && multiple() && !vScroller) {\n <div class=\"form-multi-select-dropdown-header\">\n <button (click)=\"selectAllOptions()\" class=\"form-multi-select-all\" type=\"button\" tabindex=\"0\">\n {{ selectAllLabel() }}\n </button>\n </div>\n }\n }\n @if ((visibleOptions() && options.length > 0) || loading()) {\n <ng-container *ngTemplateOutlet=\"vScroller ? multiselectVirtualScroller : multiselectOptionsDiv\" />\n } @else {\n <div class=\"form-multi-select-options-empty\">{{ searchNoResultsLabel() }}</div>\n }\n @if (loading()) {\n <c-element-cover [style]=\"{ 'border-radius': '6px', 'z-index': 2 }\" />\n }\n </div>\n }\n</c-dropdown>\n\n<ng-template #multiselectVirtualScroller>\n @let itemSizePx = itemSize();\n @let bufferPx = itemSizePx * visibleItems();\n @defer (on immediate) {\n @let optionsArray = $safeNavigationMigration(multiSelectService?.optionsArray$) | async;\n @if (optionsArray) {\n @let optMaxHeight = optionsMaxHeight();\n @let optMinWidth = minWidth();\n <cdk-virtual-scroll-viewport\n #scrollViewport\n (scrolledIndexChange)=\"handleScrolledIndexChange($event, scrollViewport)\"\n [itemSize]=\"itemSizePx\"\n [ngStyle]=\"\n optMaxHeight !== 'auto'\n ? {\n 'height.px': optMaxHeight,\n 'maxHeight.px': optMaxHeight,\n 'minWidth.px': optMinWidth,\n overflowX: 'hidden'\n }\n : { 'minWidth.px': optMinWidth, overflowX: 'hidden' }\n \"\n maxBufferPx=\"{{ bufferPx }}\"\n minBufferPx=\"{{ bufferPx }}\"\n class=\"form-multi-select-options\"\n tabindex=\"-1\"\n >\n <ng-container\n #cdkVirtualFor\n *cdkVirtualFor=\"\n let option of optionsArray;\n trackBy: trackByFn;\n templateCacheSize: 0;\n even as even;\n odd as odd;\n index as index;\n count as count;\n first as first;\n last as last\n \"\n [ngTemplateOutletContext]=\"{ $implicit: option, even, odd, index, count, first, last }\"\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n />\n </cdk-virtual-scroll-viewport>\n }\n }\n</ng-template>\n\n<ng-template #multiselectOptionsDiv>\n @let optMaxHeight = optionsMaxHeight();\n <div\n [class.form-multi-select-options]=\"visibleOptions()\"\n [ngStyle]=\"optMaxHeight !== 'auto' ? { 'maxHeight.px': optMaxHeight, overflowY: 'scroll' } : {}\"\n >\n <ng-content />\n <ng-container [ngTemplateOutlet]=\"userOptionsTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #defaultMultiSelectOptionTemplate let-option>\n <c-multi-select-option\n [disabled]=\"option.disabled\"\n [label]=\"option.label\"\n [text]=\"option.text\"\n [value]=\"option.value\"\n [visible]=\"option.visible\"\n >\n {{ option.text }}\n </c-multi-select-option>\n</ng-template>\n\n<ng-template #userOptionsTemplate>\n @for (\n option of userOptionsArray$ | async;\n track option;\n let even = $even, odd = $odd, index = $index, count = $count, first = $first, last = $last\n ) {\n <ng-container\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option, even, odd, index, count, first, last }\"\n />\n }\n</ng-template>\n", styles: [":host .disabled{pointer-events:none}:host{display:block}:host:focus-visible{outline:none}:host.cdk-focused:not(.disabled) .form-multi-select{outline:none;--cui-form-multi-select-focus-box-shadow: 0 0 0 var(--cui-focus-ring-width) rgb(from var(--cui-form-multi-select-focus-border-color) r g b / var(--cui-focus-ring-opacity))}:host.cdk-focused:not(.disabled) .form-multi-select.is-valid{--cui-form-multi-select-focus-border-color: var(--cui-form-valid-border-color)}:host.cdk-focused:not(.disabled) .form-multi-select.is-invalid{--cui-form-multi-select-focus-border-color: var(--cui-form-invalid-border-color)}:host .form-multi-select .form-multi-select-selection{display:flex;flex:1 1 auto;flex-wrap:wrap}:host .form-multi-select .form-multi-select-selection .text-placeholder,:host .form-multi-select .form-multi-select-selection .form-multi-select-search::placeholder{color:var(--cui-form-multi-select-color);opacity:.8}:host .form-multi-select .form-multi-select-selection.form-control{border:none}:host .form-multi-select .form-multi-select-search[size]{display:flex}:host ::ng-deep .cdk-virtual-scroll-content-wrapper{display:contents}:host .cdk-virtual-scroll-viewport{width:var(--cui-dropdown-min-width)}:host .dropdown-menu{--cui-dropdown-padding-y: 0}:host-context(.input-group) :host:not(:first-child) .form-multi-select-input-group{border-start-start-radius:0;border-end-start-radius:0}:host-context(.input-group) :host:not(:last-child) .form-multi-select-input-group{border-start-end-radius:0;border-end-end-radius:0}:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:not(:last-child):has(+[class*=valid-],+[class*=invalid-]) .form-multi-select-input-group,:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:last-child .form-multi-select-input-group{border-start-end-radius:var(--cui-form-multi-select-border-radius);border-end-end-radius:var(--cui-form-multi-select-border-radius)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MultiSelectTagComponent, selector: "c-multi-select-tag", inputs: ["option", "disabled", "label", "value"], outputs: ["remove"] }, { kind: "component", type: MultiSelectOptionComponent, selector: "c-multi-select-option", inputs: ["optionsStyle", "label", "text", "visible", "disabled", "selected", "value", "active", "role"], outputs: ["selectedChange", "focusChange"], exportAs: ["cMultiSelectOption"] }, { kind: "directive", type: MultiSelectSearchDirective, selector: "[cMultiSelectSearch]", inputs: ["delay", "value"], outputs: ["valueChange"], exportAs: ["cMultiSelectSearch"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.Eager, deferBlockDependencies: [() => [NgTemplateOutlet, /* @ts-ignore */
3079
+ ], queries: [{ propertyName: "multiSelectOptionsContent", predicate: MultiSelectOptionComponent, descendants: true }, { propertyName: "contentTemplates", predicate: TemplateIdDirective, descendants: true }], viewQueries: [{ propertyName: "optionsElementRef", first: true, predicate: ["options"], descendants: true }, { propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }, { propertyName: "dropdownMenu", first: true, predicate: DropdownMenuDirective, descendants: true, read: ElementRef }, { propertyName: "dropdown", first: true, predicate: DropdownComponent, descendants: true, read: ElementRef }, { propertyName: "dropdownToggle", first: true, predicate: DropdownToggleDirective, descendants: true, read: ElementRef }, { propertyName: "multiSelectOptionsView", predicate: MultiSelectOptionComponent, descendants: true }, { propertyName: "scrollViewportView", predicate: ["scrollViewport"], descendants: true }], exportAs: ["cMultiSelect"], usesOnChanges: true, ngImport: i0, template: "@let isDisabled = disabled();\n@let placeholderText = placeholder();\n@let searchOn = search();\n@let cleanerBtn = cleaner();\n@let vScroller = virtualScroller();\n@let selType = selectionType();\n@let selectedSize = optionsSelected().size;\n@let selectedOpts = selectedOptions();\n@let counterPlaceholderTxt = counterPlaceholderText();\n<c-dropdown\n #dropdown=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [class]=\"multiselectClasses()\"\n [popperOptions]=\"popperOptions()\"\n>\n <div\n #dropdownToggle=\"cDropdownToggle\"\n [caret]=\"false\"\n [disabled]=\"isDisabled\"\n cDropdownToggle\n role=\"button\"\n class=\"form-multi-select-input-group\"\n >\n <span\n [class]=\"multiselectSelectionClasses()\"\n [class.form-multi-select-selection-tags]=\"selType === 'tags' && selectedOpts.length\"\n >\n @if (selType === 'tags') {\n @for (option of optionTags(); track option.value; let i = $index) {\n <c-multi-select-tag\n (remove)=\"handleTagRemove($event)\"\n [disabled]=\"isDisabled || (option.disabled ?? false)\"\n [label]=\"option.label ?? option.value?.toString()\"\n [option]=\"option\"\n [value]=\"option.value\"\n class=\"form-multi-select-tag text-truncate\"\n tabindex=\"-1\"\n />\n }\n } @else if (selType === 'text' && !!selectedOpts.length) {\n @for (option of selectedOpts; track option.value; let i = $index, last = $last) {\n <span class=\"form-multi-select-text text-truncate\">{{ option.label }}{{ last ? '&nbsp;' : ',&nbsp;' }}</span>\n }\n }\n @if (!searchOn) {\n <span class=\"text-placeholder text-truncate\">\n {{ selectedSize === 0 ? placeholderText : counterPlaceholderTxt }}\n </span>\n } @else {\n <input\n #inputElement\n (keydown)=\"handleSearchKeyDown($event)\"\n (valueChange)=\"handleSearchValueChange($event)\"\n [attr.placeholder]=\"selectedOpts.length === 0 ? placeholderText : counterPlaceholderTxt\"\n [disabled]=\"isDisabled || !searchOn\"\n [class]=\"{ 'form-multi-select-search': true, disabled: isDisabled || !searchOn, 'text-truncate': true }\"\n [ngModel]=\"searchValue\"\n [value]=\"searchValue\"\n autocomplete=\"off\"\n cMultiSelectSearch\n size=\"2\"\n tabindex=\"{{ isDisabled ? -1 : 0 }}\"\n type=\"text\"\n />\n }\n </span>\n <div class=\"form-multi-select-buttons\">\n @if (!!cleanerBtn && selectedSize > 0 && !isDisabled) {\n <button\n (click)=\"clearAllOptions($event)\"\n [disabled]=\"isDisabled || (!isDropdownVisible() && cleanerBtn !== 'active')\"\n [attr.aria-label]=\"ariaCleanerLabel()\"\n class=\"form-multi-select-cleaner\"\n type=\"button\"\n ></button>\n }\n <button\n (click)=\"handleIndicatorClick($event)\"\n [disabled]=\"isDisabled\"\n [attr.aria-label]=\"ariaIndicatorLabel()\"\n class=\"form-multi-select-indicator\"\n type=\"button\"\n ></button>\n </div>\n </div>\n @if (!isDisabled) {\n <div\n #dropdownMenu=\"cDropdownMenu\"\n [visible]=\"dropdown.visible()\"\n cDropdownMenu\n class=\"form-multi-select-dropdown\"\n role=\"menu\"\n >\n @if (visibleOptions() && options.length > 0) {\n @if (selectAll() && multiple() && !vScroller) {\n <div class=\"form-multi-select-dropdown-header\">\n <button (click)=\"selectAllOptions()\" class=\"form-multi-select-all\" type=\"button\" tabindex=\"0\">\n {{ selectAllLabel() }}\n </button>\n </div>\n }\n }\n @if ((visibleOptions() && options.length > 0) || loading()) {\n <ng-container *ngTemplateOutlet=\"vScroller ? multiselectVirtualScroller : multiselectOptionsDiv\" />\n } @else {\n <div class=\"form-multi-select-options-empty\" role=\"status\">{{ searchNoResultsLabel() }}</div>\n }\n @if (loading()) {\n <c-element-cover [style]=\"{ 'border-radius': '6px', 'z-index': 2 }\" />\n }\n </div>\n }\n</c-dropdown>\n\n<ng-template #multiselectVirtualScroller>\n @let itemSizePx = itemSize();\n @let bufferPx = itemSizePx * visibleItems();\n @defer (on immediate) {\n @let optionsArray = $safeNavigationMigration(multiSelectService?.optionsArray$) | async;\n @if (optionsArray) {\n @let optMaxHeight = optionsMaxHeight();\n @let optMinWidth = minWidth();\n <cdk-virtual-scroll-viewport\n #scrollViewport\n (scrolledIndexChange)=\"handleScrolledIndexChange($event, scrollViewport)\"\n [itemSize]=\"itemSizePx\"\n [ngStyle]=\"\n optMaxHeight !== 'auto'\n ? {\n 'height.px': optMaxHeight,\n 'maxHeight.px': optMaxHeight,\n 'minWidth.px': optMinWidth,\n overflowX: 'hidden'\n }\n : { 'minWidth.px': optMinWidth, overflowX: 'hidden' }\n \"\n maxBufferPx=\"{{ bufferPx }}\"\n minBufferPx=\"{{ bufferPx }}\"\n class=\"form-multi-select-options\"\n tabindex=\"-1\"\n >\n <ng-container\n #cdkVirtualFor\n *cdkVirtualFor=\"\n let option of optionsArray;\n trackBy: trackByFn;\n templateCacheSize: 0;\n even as even;\n odd as odd;\n index as index;\n count as count;\n first as first;\n last as last\n \"\n [ngTemplateOutletContext]=\"{ $implicit: option, even, odd, index, count, first, last }\"\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n />\n </cdk-virtual-scroll-viewport>\n }\n }\n</ng-template>\n\n<ng-template #multiselectOptionsDiv>\n @let optMaxHeight = optionsMaxHeight();\n <div\n [class.form-multi-select-options]=\"visibleOptions()\"\n [ngStyle]=\"optMaxHeight !== 'auto' ? { 'maxHeight.px': optMaxHeight, overflowY: 'scroll' } : {}\"\n >\n <ng-content />\n <ng-container [ngTemplateOutlet]=\"userOptionsTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #defaultMultiSelectOptionTemplate let-option>\n <c-multi-select-option\n [disabled]=\"option.disabled\"\n [label]=\"option.label\"\n [text]=\"option.text\"\n [value]=\"option.value\"\n [visible]=\"option.visible\"\n >\n {{ option.text }}\n </c-multi-select-option>\n</ng-template>\n\n<ng-template #userOptionsTemplate>\n @for (\n option of userOptionsArray$ | async;\n track option;\n let even = $even, odd = $odd, index = $index, count = $count, first = $first, last = $last\n ) {\n <ng-container\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option, even, odd, index, count, first, last }\"\n />\n }\n</ng-template>\n", styles: [":host .disabled{pointer-events:none}:host{display:block}:host:focus-visible{outline:none}:host.cdk-focused:not(.disabled) .form-multi-select{outline:none;--cui-form-multi-select-focus-box-shadow: 0 0 0 var(--cui-focus-ring-width) rgb(from var(--cui-form-multi-select-focus-border-color) r g b / var(--cui-focus-ring-opacity))}:host.cdk-focused:not(.disabled) .form-multi-select.is-valid{--cui-form-multi-select-focus-border-color: var(--cui-form-valid-border-color)}:host.cdk-focused:not(.disabled) .form-multi-select.is-invalid{--cui-form-multi-select-focus-border-color: var(--cui-form-invalid-border-color)}:host .form-multi-select .form-multi-select-selection{display:flex;flex:1 1 auto;flex-wrap:wrap}:host .form-multi-select .form-multi-select-selection .text-placeholder,:host .form-multi-select .form-multi-select-selection .form-multi-select-search::placeholder{color:var(--cui-form-multi-select-color);opacity:.8}:host .form-multi-select .form-multi-select-selection.form-control{border:none}:host .form-multi-select .form-multi-select-search[size]{display:flex}:host ::ng-deep .cdk-virtual-scroll-content-wrapper{display:contents}:host .cdk-virtual-scroll-viewport{width:var(--cui-dropdown-min-width)}:host .dropdown-menu{--cui-dropdown-padding-y: 0}:host-context(.input-group) :host:not(:first-child) .form-multi-select-input-group{border-start-start-radius:0;border-end-start-radius:0}:host-context(.input-group) :host:not(:last-child) .form-multi-select-input-group{border-start-end-radius:0;border-end-end-radius:0}:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:not(:last-child):has(+[class*=valid-],+[class*=invalid-]) .form-multi-select-input-group,:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:last-child .form-multi-select-input-group{border-start-end-radius:var(--cui-form-multi-select-border-radius);border-end-end-radius:var(--cui-form-multi-select-border-radius)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MultiSelectTagComponent, selector: "c-multi-select-tag", inputs: ["option", "disabled", "label", "value"], outputs: ["remove"] }, { kind: "component", type: MultiSelectOptionComponent, selector: "c-multi-select-option", inputs: ["optionsStyle", "label", "text", "visible", "disabled", "selected", "value", "active", "role"], outputs: ["selectedChange", "focusChange"], exportAs: ["cMultiSelectOption"] }, { kind: "directive", type: MultiSelectSearchDirective, selector: "[cMultiSelectSearch]", inputs: ["delay", "value"], outputs: ["valueChange"], exportAs: ["cMultiSelectSearch"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.Eager, deferBlockDependencies: [() => [NgTemplateOutlet, /* @ts-ignore */
3066
3080
  import('@angular/cdk/scrolling').then(m => m.CdkFixedSizeVirtualScroll), /* @ts-ignore */
3067
3081
  import('@angular/cdk/scrolling').then(m => m.CdkVirtualScrollViewport), /* @ts-ignore */
3068
3082
  import('@angular/cdk/scrolling').then(m => m.CdkVirtualForOf), NgStyle,
@@ -3105,8 +3119,8 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.0.7", ng
3105
3119
  '[attr.aria-expanded]': 'visible()',
3106
3120
  '[attr.aria-disabled]': 'disabled()',
3107
3121
  '[attr.tabindex]': 'tabIndex'
3108
- }, template: "@let isDisabled = disabled();\n@let placeholderText = placeholder();\n@let searchOn = search();\n@let cleanerBtn = cleaner();\n@let vScroller = virtualScroller();\n@let selType = selectionType();\n@let selectedSize = optionsSelected().size;\n@let selectedOpts = selectedOptions();\n@let counterPlaceholderTxt = counterPlaceholderText();\n<c-dropdown\n #dropdown=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [class]=\"multiselectClasses()\"\n [popperOptions]=\"popperOptions()\"\n>\n <div\n #dropdownToggle=\"cDropdownToggle\"\n [caret]=\"false\"\n [disabled]=\"isDisabled\"\n cDropdownToggle\n role=\"button\"\n class=\"form-multi-select-input-group\"\n >\n <span\n [class]=\"multiselectSelectionClasses()\"\n [class.form-multi-select-selection-tags]=\"selType === 'tags' && selectedOpts.length\"\n >\n @if (selType === 'tags') {\n @for (option of optionTags(); track option.value; let i = $index) {\n <c-multi-select-tag\n (remove)=\"handleTagRemove($event)\"\n [disabled]=\"isDisabled || (option.disabled ?? false)\"\n [label]=\"option.label ?? option.value?.toString()\"\n [option]=\"option\"\n [value]=\"option.value\"\n class=\"form-multi-select-tag text-truncate\"\n tabindex=\"-1\"\n />\n }\n } @else if (selType === 'text' && !!selectedOpts.length) {\n @for (option of selectedOpts; track option.value; let i = $index, last = $last) {\n <span class=\"form-multi-select-text text-truncate\">{{ option.label }}{{ last ? '&nbsp;' : ',&nbsp;' }}</span>\n }\n }\n @if (!searchOn) {\n <span class=\"text-placeholder text-truncate\">\n {{ selectedSize === 0 ? placeholderText : counterPlaceholderTxt }}\n </span>\n } @else {\n <input\n #inputElement\n (keydown)=\"handleSearchKeyDown($event)\"\n (valueChange)=\"handleSearchValueChange($event)\"\n [attr.placeholder]=\"selectedOpts.length === 0 ? placeholderText : counterPlaceholderTxt\"\n [disabled]=\"isDisabled || !searchOn\"\n [class]=\"{ 'form-multi-select-search': true, disabled: isDisabled || !searchOn, 'text-truncate': true }\"\n [ngModel]=\"searchValue\"\n [value]=\"searchValue\"\n autocomplete=\"off\"\n cMultiSelectSearch\n size=\"2\"\n tabindex=\"{{ isDisabled ? -1 : 0 }}\"\n type=\"text\"\n />\n }\n </span>\n <div class=\"form-multi-select-buttons\">\n @if (!!cleanerBtn && selectedSize > 0 && !isDisabled) {\n <button\n (click)=\"clearAllOptions($event)\"\n [disabled]=\"isDisabled || (!isDropdownVisible() && cleanerBtn !== 'active')\"\n aria-label=\"Clear all\"\n class=\"form-multi-select-cleaner\"\n type=\"button\"\n ></button>\n }\n <button\n (click)=\"handleIndicatorClick($event)\"\n [disabled]=\"isDisabled\"\n class=\"form-multi-select-indicator\"\n type=\"button\"\n ></button>\n </div>\n </div>\n @if (!isDisabled) {\n <div\n #dropdownMenu=\"cDropdownMenu\"\n [visible]=\"dropdown.visible()\"\n cDropdownMenu\n class=\"form-multi-select-dropdown\"\n role=\"menu\"\n >\n @if (visibleOptions() && options.length > 0) {\n @if (selectAll() && multiple() && !vScroller) {\n <div class=\"form-multi-select-dropdown-header\">\n <button (click)=\"selectAllOptions()\" class=\"form-multi-select-all\" type=\"button\" tabindex=\"0\">\n {{ selectAllLabel() }}\n </button>\n </div>\n }\n }\n @if ((visibleOptions() && options.length > 0) || loading()) {\n <ng-container *ngTemplateOutlet=\"vScroller ? multiselectVirtualScroller : multiselectOptionsDiv\" />\n } @else {\n <div class=\"form-multi-select-options-empty\">{{ searchNoResultsLabel() }}</div>\n }\n @if (loading()) {\n <c-element-cover [style]=\"{ 'border-radius': '6px', 'z-index': 2 }\" />\n }\n </div>\n }\n</c-dropdown>\n\n<ng-template #multiselectVirtualScroller>\n @let itemSizePx = itemSize();\n @let bufferPx = itemSizePx * visibleItems();\n @defer (on immediate) {\n @let optionsArray = $safeNavigationMigration(multiSelectService?.optionsArray$) | async;\n @if (optionsArray) {\n @let optMaxHeight = optionsMaxHeight();\n @let optMinWidth = minWidth();\n <cdk-virtual-scroll-viewport\n #scrollViewport\n (scrolledIndexChange)=\"handleScrolledIndexChange($event, scrollViewport)\"\n [itemSize]=\"itemSizePx\"\n [ngStyle]=\"\n optMaxHeight !== 'auto'\n ? {\n 'height.px': optMaxHeight,\n 'maxHeight.px': optMaxHeight,\n 'minWidth.px': optMinWidth,\n overflowX: 'hidden'\n }\n : { 'minWidth.px': optMinWidth, overflowX: 'hidden' }\n \"\n maxBufferPx=\"{{ bufferPx }}\"\n minBufferPx=\"{{ bufferPx }}\"\n class=\"form-multi-select-options\"\n tabindex=\"-1\"\n >\n <ng-container\n #cdkVirtualFor\n *cdkVirtualFor=\"\n let option of optionsArray;\n trackBy: trackByFn;\n templateCacheSize: 0;\n even as even;\n odd as odd;\n index as index;\n count as count;\n first as first;\n last as last\n \"\n [ngTemplateOutletContext]=\"{ $implicit: option, even, odd, index, count, first, last }\"\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n />\n </cdk-virtual-scroll-viewport>\n }\n }\n</ng-template>\n\n<ng-template #multiselectOptionsDiv>\n @let optMaxHeight = optionsMaxHeight();\n <div\n [class.form-multi-select-options]=\"visibleOptions()\"\n [ngStyle]=\"optMaxHeight !== 'auto' ? { 'maxHeight.px': optMaxHeight, overflowY: 'scroll' } : {}\"\n >\n <ng-content />\n <ng-container [ngTemplateOutlet]=\"userOptionsTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #defaultMultiSelectOptionTemplate let-option>\n <c-multi-select-option\n [disabled]=\"option.disabled\"\n [label]=\"option.label\"\n [text]=\"option.text\"\n [value]=\"option.value\"\n [visible]=\"option.visible\"\n >\n {{ option.text }}\n </c-multi-select-option>\n</ng-template>\n\n<ng-template #userOptionsTemplate>\n @for (\n option of userOptionsArray$ | async;\n track option;\n let even = $even, odd = $odd, index = $index, count = $count, first = $first, last = $last\n ) {\n <ng-container\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option, even, odd, index, count, first, last }\"\n />\n }\n</ng-template>\n", styles: [":host .disabled{pointer-events:none}:host{display:block}:host:focus-visible{outline:none}:host.cdk-focused:not(.disabled) .form-multi-select{outline:none;--cui-form-multi-select-focus-box-shadow: 0 0 0 var(--cui-focus-ring-width) rgb(from var(--cui-form-multi-select-focus-border-color) r g b / var(--cui-focus-ring-opacity))}:host.cdk-focused:not(.disabled) .form-multi-select.is-valid{--cui-form-multi-select-focus-border-color: var(--cui-form-valid-border-color)}:host.cdk-focused:not(.disabled) .form-multi-select.is-invalid{--cui-form-multi-select-focus-border-color: var(--cui-form-invalid-border-color)}:host .form-multi-select .form-multi-select-selection{display:flex;flex:1 1 auto;flex-wrap:wrap}:host .form-multi-select .form-multi-select-selection .text-placeholder,:host .form-multi-select .form-multi-select-selection .form-multi-select-search::placeholder{color:var(--cui-form-multi-select-color);opacity:.8}:host .form-multi-select .form-multi-select-selection.form-control{border:none}:host .form-multi-select .form-multi-select-search[size]{display:flex}:host ::ng-deep .cdk-virtual-scroll-content-wrapper{display:contents}:host .cdk-virtual-scroll-viewport{width:var(--cui-dropdown-min-width)}:host .dropdown-menu{--cui-dropdown-padding-y: 0}:host-context(.input-group) :host:not(:first-child) .form-multi-select-input-group{border-start-start-radius:0;border-end-start-radius:0}:host-context(.input-group) :host:not(:last-child) .form-multi-select-input-group{border-start-end-radius:0;border-end-end-radius:0}:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:not(:last-child):has(+[class*=valid-],+[class*=invalid-]) .form-multi-select-input-group,:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:last-child .form-multi-select-input-group{border-start-end-radius:var(--cui-form-multi-select-border-radius);border-end-end-radius:var(--cui-form-multi-select-border-radius)}\n"] }]
3109
- }], ctorParameters: () => [], propDecorators: { allowCreateOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowCreateOptions", required: false }] }], cleaner: [{ type: i0.Input, args: [{ isSignal: true, alias: "cleaner", required: false }] }], clearSearchOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSearchOnSelect", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], options: [{
3122
+ }, template: "@let isDisabled = disabled();\n@let placeholderText = placeholder();\n@let searchOn = search();\n@let cleanerBtn = cleaner();\n@let vScroller = virtualScroller();\n@let selType = selectionType();\n@let selectedSize = optionsSelected().size;\n@let selectedOpts = selectedOptions();\n@let counterPlaceholderTxt = counterPlaceholderText();\n<c-dropdown\n #dropdown=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [class]=\"multiselectClasses()\"\n [popperOptions]=\"popperOptions()\"\n>\n <div\n #dropdownToggle=\"cDropdownToggle\"\n [caret]=\"false\"\n [disabled]=\"isDisabled\"\n cDropdownToggle\n role=\"button\"\n class=\"form-multi-select-input-group\"\n >\n <span\n [class]=\"multiselectSelectionClasses()\"\n [class.form-multi-select-selection-tags]=\"selType === 'tags' && selectedOpts.length\"\n >\n @if (selType === 'tags') {\n @for (option of optionTags(); track option.value; let i = $index) {\n <c-multi-select-tag\n (remove)=\"handleTagRemove($event)\"\n [disabled]=\"isDisabled || (option.disabled ?? false)\"\n [label]=\"option.label ?? option.value?.toString()\"\n [option]=\"option\"\n [value]=\"option.value\"\n class=\"form-multi-select-tag text-truncate\"\n tabindex=\"-1\"\n />\n }\n } @else if (selType === 'text' && !!selectedOpts.length) {\n @for (option of selectedOpts; track option.value; let i = $index, last = $last) {\n <span class=\"form-multi-select-text text-truncate\">{{ option.label }}{{ last ? '&nbsp;' : ',&nbsp;' }}</span>\n }\n }\n @if (!searchOn) {\n <span class=\"text-placeholder text-truncate\">\n {{ selectedSize === 0 ? placeholderText : counterPlaceholderTxt }}\n </span>\n } @else {\n <input\n #inputElement\n (keydown)=\"handleSearchKeyDown($event)\"\n (valueChange)=\"handleSearchValueChange($event)\"\n [attr.placeholder]=\"selectedOpts.length === 0 ? placeholderText : counterPlaceholderTxt\"\n [disabled]=\"isDisabled || !searchOn\"\n [class]=\"{ 'form-multi-select-search': true, disabled: isDisabled || !searchOn, 'text-truncate': true }\"\n [ngModel]=\"searchValue\"\n [value]=\"searchValue\"\n autocomplete=\"off\"\n cMultiSelectSearch\n size=\"2\"\n tabindex=\"{{ isDisabled ? -1 : 0 }}\"\n type=\"text\"\n />\n }\n </span>\n <div class=\"form-multi-select-buttons\">\n @if (!!cleanerBtn && selectedSize > 0 && !isDisabled) {\n <button\n (click)=\"clearAllOptions($event)\"\n [disabled]=\"isDisabled || (!isDropdownVisible() && cleanerBtn !== 'active')\"\n [attr.aria-label]=\"ariaCleanerLabel()\"\n class=\"form-multi-select-cleaner\"\n type=\"button\"\n ></button>\n }\n <button\n (click)=\"handleIndicatorClick($event)\"\n [disabled]=\"isDisabled\"\n [attr.aria-label]=\"ariaIndicatorLabel()\"\n class=\"form-multi-select-indicator\"\n type=\"button\"\n ></button>\n </div>\n </div>\n @if (!isDisabled) {\n <div\n #dropdownMenu=\"cDropdownMenu\"\n [visible]=\"dropdown.visible()\"\n cDropdownMenu\n class=\"form-multi-select-dropdown\"\n role=\"menu\"\n >\n @if (visibleOptions() && options.length > 0) {\n @if (selectAll() && multiple() && !vScroller) {\n <div class=\"form-multi-select-dropdown-header\">\n <button (click)=\"selectAllOptions()\" class=\"form-multi-select-all\" type=\"button\" tabindex=\"0\">\n {{ selectAllLabel() }}\n </button>\n </div>\n }\n }\n @if ((visibleOptions() && options.length > 0) || loading()) {\n <ng-container *ngTemplateOutlet=\"vScroller ? multiselectVirtualScroller : multiselectOptionsDiv\" />\n } @else {\n <div class=\"form-multi-select-options-empty\" role=\"status\">{{ searchNoResultsLabel() }}</div>\n }\n @if (loading()) {\n <c-element-cover [style]=\"{ 'border-radius': '6px', 'z-index': 2 }\" />\n }\n </div>\n }\n</c-dropdown>\n\n<ng-template #multiselectVirtualScroller>\n @let itemSizePx = itemSize();\n @let bufferPx = itemSizePx * visibleItems();\n @defer (on immediate) {\n @let optionsArray = $safeNavigationMigration(multiSelectService?.optionsArray$) | async;\n @if (optionsArray) {\n @let optMaxHeight = optionsMaxHeight();\n @let optMinWidth = minWidth();\n <cdk-virtual-scroll-viewport\n #scrollViewport\n (scrolledIndexChange)=\"handleScrolledIndexChange($event, scrollViewport)\"\n [itemSize]=\"itemSizePx\"\n [ngStyle]=\"\n optMaxHeight !== 'auto'\n ? {\n 'height.px': optMaxHeight,\n 'maxHeight.px': optMaxHeight,\n 'minWidth.px': optMinWidth,\n overflowX: 'hidden'\n }\n : { 'minWidth.px': optMinWidth, overflowX: 'hidden' }\n \"\n maxBufferPx=\"{{ bufferPx }}\"\n minBufferPx=\"{{ bufferPx }}\"\n class=\"form-multi-select-options\"\n tabindex=\"-1\"\n >\n <ng-container\n #cdkVirtualFor\n *cdkVirtualFor=\"\n let option of optionsArray;\n trackBy: trackByFn;\n templateCacheSize: 0;\n even as even;\n odd as odd;\n index as index;\n count as count;\n first as first;\n last as last\n \"\n [ngTemplateOutletContext]=\"{ $implicit: option, even, odd, index, count, first, last }\"\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n />\n </cdk-virtual-scroll-viewport>\n }\n }\n</ng-template>\n\n<ng-template #multiselectOptionsDiv>\n @let optMaxHeight = optionsMaxHeight();\n <div\n [class.form-multi-select-options]=\"visibleOptions()\"\n [ngStyle]=\"optMaxHeight !== 'auto' ? { 'maxHeight.px': optMaxHeight, overflowY: 'scroll' } : {}\"\n >\n <ng-content />\n <ng-container [ngTemplateOutlet]=\"userOptionsTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #defaultMultiSelectOptionTemplate let-option>\n <c-multi-select-option\n [disabled]=\"option.disabled\"\n [label]=\"option.label\"\n [text]=\"option.text\"\n [value]=\"option.value\"\n [visible]=\"option.visible\"\n >\n {{ option.text }}\n </c-multi-select-option>\n</ng-template>\n\n<ng-template #userOptionsTemplate>\n @for (\n option of userOptionsArray$ | async;\n track option;\n let even = $even, odd = $odd, index = $index, count = $count, first = $first, last = $last\n ) {\n <ng-container\n [ngTemplateOutlet]=\"templates['multiSelectOptionTemplate'] || defaultMultiSelectOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: option, even, odd, index, count, first, last }\"\n />\n }\n</ng-template>\n", styles: [":host .disabled{pointer-events:none}:host{display:block}:host:focus-visible{outline:none}:host.cdk-focused:not(.disabled) .form-multi-select{outline:none;--cui-form-multi-select-focus-box-shadow: 0 0 0 var(--cui-focus-ring-width) rgb(from var(--cui-form-multi-select-focus-border-color) r g b / var(--cui-focus-ring-opacity))}:host.cdk-focused:not(.disabled) .form-multi-select.is-valid{--cui-form-multi-select-focus-border-color: var(--cui-form-valid-border-color)}:host.cdk-focused:not(.disabled) .form-multi-select.is-invalid{--cui-form-multi-select-focus-border-color: var(--cui-form-invalid-border-color)}:host .form-multi-select .form-multi-select-selection{display:flex;flex:1 1 auto;flex-wrap:wrap}:host .form-multi-select .form-multi-select-selection .text-placeholder,:host .form-multi-select .form-multi-select-selection .form-multi-select-search::placeholder{color:var(--cui-form-multi-select-color);opacity:.8}:host .form-multi-select .form-multi-select-selection.form-control{border:none}:host .form-multi-select .form-multi-select-search[size]{display:flex}:host ::ng-deep .cdk-virtual-scroll-content-wrapper{display:contents}:host .cdk-virtual-scroll-viewport{width:var(--cui-dropdown-min-width)}:host .dropdown-menu{--cui-dropdown-padding-y: 0}:host-context(.input-group) :host:not(:first-child) .form-multi-select-input-group{border-start-start-radius:0;border-end-start-radius:0}:host-context(.input-group) :host:not(:last-child) .form-multi-select-input-group{border-start-end-radius:0;border-end-end-radius:0}:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:not(:last-child):has(+[class*=valid-],+[class*=invalid-]) .form-multi-select-input-group,:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:last-child .form-multi-select-input-group{border-start-end-radius:var(--cui-form-multi-select-border-radius);border-end-end-radius:var(--cui-form-multi-select-border-radius)}\n"] }]
3123
+ }], ctorParameters: () => [], propDecorators: { allowCreateOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowCreateOptions", required: false }] }], ariaCleanerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaCleanerLabel", required: false }] }], ariaIndicatorLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaIndicatorLabel", required: false }] }], cleaner: [{ type: i0.Input, args: [{ isSignal: true, alias: "cleaner", required: false }] }], clearSearchOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSearchOnSelect", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], options: [{
3110
3124
  type: Input
3111
3125
  }], optionsMaxHeightInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsMaxHeight", required: false }] }], optionsStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsStyle", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], resetSelectionOnOptionsChange: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetSelectionOnOptionsChange", required: false }] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }], searchNoResultsLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchNoResultsLabel", required: false }] }], searchValue: [{
3112
3126
  type: Input
@@ -3484,7 +3498,7 @@ class AutocompleteOptionComponent {
3484
3498
  return this.#elementRef.nativeElement.innerText ?? this.option()?.label ?? '';
3485
3499
  }
3486
3500
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: AutocompleteOptionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
3487
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: AutocompleteOptionComponent, isStandalone: true, selector: "c-autocomplete-option", inputs: { disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: true, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "-1" }, properties: { "class": "hostClasses()", "attr.role": "\"option\"" }, classAttribute: "autocomplete-option" }, ngImport: i0, template: '<ng-content />', isInline: true, styles: [":host{display:block;-webkit-user-select:none;user-select:none;white-space:nowrap;overflow:hidden}\n"], changeDetection: i0.ChangeDetectionStrategy.Eager });
3501
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: AutocompleteOptionComponent, isStandalone: true, selector: "c-autocomplete-option", inputs: { disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, option: { classPropertyName: "option", publicName: "option", isSignal: true, isRequired: true, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "tabindex": "-1" }, properties: { "class": "hostClasses()", "attr.role": "\"option\"", "attr.aria-selected": "selected()" }, classAttribute: "autocomplete-option" }, ngImport: i0, template: '<ng-content />', isInline: true, styles: [":host{display:block;-webkit-user-select:none;user-select:none;white-space:nowrap;overflow:hidden}\n"], changeDetection: i0.ChangeDetectionStrategy.Eager });
3488
3502
  }
3489
3503
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: AutocompleteOptionComponent, decorators: [{
3490
3504
  type: Component,
@@ -3492,6 +3506,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
3492
3506
  class: 'autocomplete-option',
3493
3507
  '[class]': 'hostClasses()',
3494
3508
  '[attr.role]': '"option"',
3509
+ '[attr.aria-selected]': 'selected()',
3495
3510
  tabindex: '-1'
3496
3511
  }, styles: [":host{display:block;-webkit-user-select:none;user-select:none;white-space:nowrap;overflow:hidden}\n"] }]
3497
3512
  }], propDecorators: { disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], option: [{ type: i0.Input, args: [{ isSignal: true, alias: "option", required: true }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }] } });
@@ -3753,6 +3768,20 @@ class AutocompleteComponent {
3753
3768
  * @default false
3754
3769
  */
3755
3770
  allowOnlyDefinedOptions = input(false, { ...(ngDevMode ? { debugName: "allowOnlyDefinedOptions" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
3771
+ /**
3772
+ * Sets the accessible label (`aria-label`) for the button that clears the current selection. This improves accessibility for screen readers.
3773
+ * @return string
3774
+ * @since 5.7.7
3775
+ */
3776
+ ariaCleanerLabel = input('Clear selection', /* @ts-ignore */
3777
+ ...(ngDevMode ? [{ debugName: "ariaCleanerLabel" }] : /* istanbul ignore next */ []));
3778
+ /**
3779
+ * Sets the accessible label (`aria-label`) for the dropdown toggle indicator button. This improves accessibility for screen readers.
3780
+ * @return string
3781
+ * @since 5.7.7
3782
+ */
3783
+ ariaIndicatorLabel = input('Toggle visibility of options menu', /* @ts-ignore */
3784
+ ...(ngDevMode ? [{ debugName: "ariaIndicatorLabel" }] : /* istanbul ignore next */ []));
3756
3785
  /**
3757
3786
  * Enables selection cleaner element.
3758
3787
  * When `true`, displays a clear button that allows users to reset the selection.
@@ -4055,7 +4084,7 @@ class AutocompleteComponent {
4055
4084
  }, /* @ts-ignore */
4056
4085
  ...(ngDevMode ? [{ debugName: "#hintsEffect" }] : /* istanbul ignore next */ []));
4057
4086
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: AutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4058
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: AutocompleteComponent, isStandalone: true, selector: "c-autocomplete", inputs: { inputPortalContent: { classPropertyName: "inputPortalContent", publicName: "inputPortalContent", isSignal: true, isRequired: true, transformFunction: null }, allowOnlyDefinedOptions: { classPropertyName: "allowOnlyDefinedOptions", publicName: "allowOnlyDefinedOptions", isSignal: true, isRequired: false, transformFunction: null }, cleaner: { classPropertyName: "cleaner", publicName: "cleaner", isSignal: true, isRequired: false, transformFunction: null }, clearSearchOnSelect: { classPropertyName: "clearSearchOnSelect", publicName: "clearSearchOnSelect", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, highlightOptionsOnSearch: { classPropertyName: "highlightOptionsOnSearch", publicName: "highlightOptionsOnSearch", isSignal: true, isRequired: false, transformFunction: null }, indicator: { classPropertyName: "indicator", publicName: "indicator", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, optionsMaxHeight: { classPropertyName: "optionsMaxHeight", publicName: "optionsMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, optionTemplate: { classPropertyName: "optionTemplate", publicName: "optionTemplate", isSignal: true, isRequired: false, transformFunction: null }, optionGroupTemplate: { classPropertyName: "optionGroupTemplate", publicName: "optionGroupTemplate", isSignal: true, isRequired: false, transformFunction: null }, popperOptions: { classPropertyName: "popperOptions", publicName: "popperOptions", isSignal: true, isRequired: true, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, searchNoResultsLabel: { classPropertyName: "searchNoResultsLabel", publicName: "searchNoResultsLabel", isSignal: true, isRequired: false, transformFunction: null }, showHints: { classPropertyName: "showHints", publicName: "showHints", isSignal: true, isRequired: false, transformFunction: null }, sizing: { classPropertyName: "sizing", publicName: "sizing", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: true, isRequired: false, transformFunction: null }, virtualScroller: { classPropertyName: "virtualScroller", publicName: "virtualScroller", isSignal: true, isRequired: false, transformFunction: null }, visibleInput: { classPropertyName: "visibleInput", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, visibleItems: { classPropertyName: "visibleItems", publicName: "visibleItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { inputChange: "inputChange", optionChange: "optionChange", valueChange: "valueChange", visibleChange: "visibleChange" }, host: { attributes: { "ngSkipHydration": "true" }, listeners: { "keydown": "handleGlobalSearch($event)" }, properties: { "class": "hostClasses()" }, classAttribute: "autocomplete" }, providers: [AutocompleteService], viewQueries: [{ propertyName: "dropdownMenuRef", first: true, predicate: ["dropdownMenuRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "togglerRef", first: true, predicate: ["dropdownToggleRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "cleanerRef", first: true, predicate: ["cleanerRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "indicatorRef", first: true, predicate: ["indicatorRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "optionsRef", first: true, predicate: AutocompleteOptionsComponent, descendants: true, isSignal: true }], exportAs: ["cAutocompleteWrapper"], ngImport: i0, template: "@let inputElementId = inputPortalContent().nativeElement.getAttribute('id');\n@let allOptions = options();\n@let isDisabled = disabled();\n@let searchVal = searchValue();\n@let selectedVal = selected() ?? null;\n@let hint = hintValue();\n@let hasCleaner = cleaner();\n@let hasIndicator = indicator();\n\n<ng-template [cdkPortalOutlet]=\"domTogglerPortal()\" />\n<ng-template [cdkPortalOutlet]=\"domDropdownMenuPortal()\" />\n\n<c-dropdown\n #dropdownRef=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [popperOptions]=\"popperOptions()\"\n class=\"d-flex\"\n>\n <div\n #dropdownToggleRef=\"cDropdownToggle\"\n [caret]=\"false\"\n [disabled]=\"isDisabled\"\n cDropdownToggle\n class=\"autocomplete-input-group\"\n role=\"button\"\n >\n @if (showHints() && (!!searchVal || (hint && !searchVal && !selectedVal))) {\n <input\n #inputHintRef\n [id]=\"`${inputElementId}-hint`\"\n [value]=\"hint\"\n aria-hidden=\"true\"\n autoComplete=\"off\"\n class=\"autocomplete-input autocomplete-input-hint\"\n readOnly\n tabIndex=\"-1\"\n />\n }\n\n <span style=\"display: contents\">\n <ng-template [cdkPortalOutlet]=\"domInputPortal()\" />\n </span>\n\n @if (hasCleaner || hasIndicator) {\n <div class=\"autocomplete-buttons\">\n @if (!isDisabled && !readOnly() && hasCleaner && selectedVal) {\n <button\n #cleanerRef\n (click)=\"handleClear($event)\"\n class=\"autocomplete-cleaner\"\n tabindex=\"-1\"\n type=\"button\"\n ></button>\n }\n @if (hasIndicator) {\n <button\n #indicatorRef\n (click)=\"handleIndicatorClick($event)\"\n [disabled]=\"isDisabled || !(searchNoResultsLabel() || allOptions.length > 0) && isExternalSearch(search())\"\n class=\"autocomplete-indicator\"\n tabindex=\"-1\"\n type=\"button\"\n ></button>\n }\n </div>\n }\n </div>\n\n <div #dropdownMenuRef>\n @let showDropdown = show();\n @let noResultsLabel = searchNoResultsLabel();\n @let isLoading = loading();\n @let isVisible = dropdownRef.visible();\n @let showOptions = allOptions.length && !isLoading;\n @let showLoadingWithResults = isLoading && searchVal && allOptions.length;\n @let showNoResults = !isLoading && noResultsLabel && searchVal && !allOptions.length;\n @if (!isDisabled) {\n <div\n #dropdownMenu=\"cDropdownMenu\"\n [attr.aria-labelledby]=\"inputElementId\"\n [class]=\"dropdownMenuClasses()\"\n [id]=\"`${inputElementId}-listbox`\"\n [class.show]=\"isVisible && (showOptions || showLoadingWithResults || showNoResults)\"\n cDropdownMenu\n role=\"listbox\"\n >\n @if (showDropdown) {\n <c-autocomplete-options\n #optionsRef\n [delay]=\"delay()\"\n [highlightOptionsOnSearch]=\"highlightOptionsOnSearch()\"\n [itemSize]=\"itemSize()\"\n [loading]=\"isLoading\"\n [optionGroupTemplate]=\"optionGroupTemplate()\"\n [optionTemplate]=\"optionTemplate()\"\n [optionsMaxHeight]=\"optionsMaxHeight()\"\n [options]=\"allOptions\"\n [searchNoResultsLabel]=\"searchNoResultsLabel()\"\n [searchValue]=\"searchVal\"\n [search]=\"search()\"\n [selected]=\"selectedVal\"\n [virtualScroller]=\"virtualScroller()\"\n [visibleItems]=\"visibleItems()\"\n tabindex=\"-1\"\n />\n } @else if (showNoResults) {\n <div class=\"autocomplete-options-empty\">{{ noResultsLabel }}</div>\n }\n @if (showLoadingWithResults) {\n <c-element-cover [style]=\"{'border-radius': '6px', 'z-index': 2}\" />\n }\n </div>\n }\n </div>\n</c-dropdown>\n", styles: [":host{display:block}:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:not(:last-child):has(+[class*=valid-],+[class*=invalid-]) .autocomplete-input-group,:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:last-child .autocomplete-input-group{border-start-end-radius:var(--cui-autocomplete-border-radius);border-end-end-radius:var(--cui-autocomplete-border-radius)}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: AutocompleteOptionsComponent, selector: "c-autocomplete-options", inputs: ["delay", "highlightOptionsOnSearch", "loading", "itemSize", "options", "optionsMaxHeight", "optionTemplate", "optionGroupTemplate", "search", "searchNoResultsLabel", "searchValue", "selected", "virtualScroller", "visibleItems"], outputs: ["optionClick"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
4087
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: AutocompleteComponent, isStandalone: true, selector: "c-autocomplete", inputs: { inputPortalContent: { classPropertyName: "inputPortalContent", publicName: "inputPortalContent", isSignal: true, isRequired: true, transformFunction: null }, allowOnlyDefinedOptions: { classPropertyName: "allowOnlyDefinedOptions", publicName: "allowOnlyDefinedOptions", isSignal: true, isRequired: false, transformFunction: null }, ariaCleanerLabel: { classPropertyName: "ariaCleanerLabel", publicName: "ariaCleanerLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaIndicatorLabel: { classPropertyName: "ariaIndicatorLabel", publicName: "ariaIndicatorLabel", isSignal: true, isRequired: false, transformFunction: null }, cleaner: { classPropertyName: "cleaner", publicName: "cleaner", isSignal: true, isRequired: false, transformFunction: null }, clearSearchOnSelect: { classPropertyName: "clearSearchOnSelect", publicName: "clearSearchOnSelect", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, highlightOptionsOnSearch: { classPropertyName: "highlightOptionsOnSearch", publicName: "highlightOptionsOnSearch", isSignal: true, isRequired: false, transformFunction: null }, indicator: { classPropertyName: "indicator", publicName: "indicator", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, optionsMaxHeight: { classPropertyName: "optionsMaxHeight", publicName: "optionsMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, optionTemplate: { classPropertyName: "optionTemplate", publicName: "optionTemplate", isSignal: true, isRequired: false, transformFunction: null }, optionGroupTemplate: { classPropertyName: "optionGroupTemplate", publicName: "optionGroupTemplate", isSignal: true, isRequired: false, transformFunction: null }, popperOptions: { classPropertyName: "popperOptions", publicName: "popperOptions", isSignal: true, isRequired: true, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, searchNoResultsLabel: { classPropertyName: "searchNoResultsLabel", publicName: "searchNoResultsLabel", isSignal: true, isRequired: false, transformFunction: null }, showHints: { classPropertyName: "showHints", publicName: "showHints", isSignal: true, isRequired: false, transformFunction: null }, sizing: { classPropertyName: "sizing", publicName: "sizing", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: true, isRequired: false, transformFunction: null }, virtualScroller: { classPropertyName: "virtualScroller", publicName: "virtualScroller", isSignal: true, isRequired: false, transformFunction: null }, visibleInput: { classPropertyName: "visibleInput", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, visibleItems: { classPropertyName: "visibleItems", publicName: "visibleItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { inputChange: "inputChange", optionChange: "optionChange", valueChange: "valueChange", visibleChange: "visibleChange" }, host: { attributes: { "ngSkipHydration": "true" }, listeners: { "keydown": "handleGlobalSearch($event)" }, properties: { "class": "hostClasses()" }, classAttribute: "autocomplete" }, providers: [AutocompleteService], viewQueries: [{ propertyName: "dropdownMenuRef", first: true, predicate: ["dropdownMenuRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "togglerRef", first: true, predicate: ["dropdownToggleRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "cleanerRef", first: true, predicate: ["cleanerRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "indicatorRef", first: true, predicate: ["indicatorRef"], descendants: true, read: ElementRef, isSignal: true }, { propertyName: "optionsRef", first: true, predicate: AutocompleteOptionsComponent, descendants: true, isSignal: true }], exportAs: ["cAutocompleteWrapper"], ngImport: i0, template: "@let inputElementId = inputPortalContent().nativeElement.getAttribute('id');\n@let allOptions = options();\n@let isDisabled = disabled();\n@let searchVal = searchValue();\n@let selectedVal = selected() ?? null;\n@let hint = hintValue();\n@let hasCleaner = cleaner();\n@let hasIndicator = indicator();\n\n<ng-template [cdkPortalOutlet]=\"domTogglerPortal()\" />\n<ng-template [cdkPortalOutlet]=\"domDropdownMenuPortal()\" />\n\n<c-dropdown\n #dropdownRef=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [popperOptions]=\"popperOptions()\"\n class=\"d-flex\"\n>\n <div\n #dropdownToggleRef=\"cDropdownToggle\"\n [caret]=\"false\"\n [disabled]=\"isDisabled\"\n cDropdownToggle\n class=\"autocomplete-input-group\"\n role=\"button\"\n >\n @if (showHints() && (!!searchVal || (hint && !searchVal && !selectedVal))) {\n <input\n #inputHintRef\n [id]=\"`${inputElementId}-hint`\"\n [value]=\"hint\"\n aria-hidden=\"true\"\n autoComplete=\"off\"\n class=\"autocomplete-input autocomplete-input-hint\"\n readOnly\n tabIndex=\"-1\"\n />\n }\n\n <span style=\"display: contents\">\n <ng-template [cdkPortalOutlet]=\"domInputPortal()\" />\n </span>\n\n @if (hasCleaner || hasIndicator) {\n <div class=\"autocomplete-buttons\">\n @if (!isDisabled && !readOnly() && hasCleaner && selectedVal) {\n <button\n #cleanerRef\n (click)=\"handleClear($event)\"\n [attr.aria-label]=\"ariaCleanerLabel()\"\n class=\"autocomplete-cleaner\"\n tabindex=\"-1\"\n type=\"button\"\n ></button>\n }\n @if (hasIndicator) {\n <button\n #indicatorRef\n (click)=\"handleIndicatorClick($event)\"\n [disabled]=\"isDisabled || !(searchNoResultsLabel() || allOptions.length > 0) && isExternalSearch(search())\"\n [attr.aria-label]=\"ariaIndicatorLabel()\"\n class=\"autocomplete-indicator\"\n tabindex=\"-1\"\n type=\"button\"\n ></button>\n }\n </div>\n }\n </div>\n\n <div #dropdownMenuRef>\n @let showDropdown = show();\n @let noResultsLabel = searchNoResultsLabel();\n @let isLoading = loading();\n @let isVisible = dropdownRef.visible();\n @let showOptions = allOptions.length && !isLoading;\n @let showLoadingWithResults = isLoading && searchVal && allOptions.length;\n @let showNoResults = !isLoading && noResultsLabel && searchVal && !allOptions.length;\n @if (!isDisabled) {\n <div\n #dropdownMenu=\"cDropdownMenu\"\n [attr.aria-labelledby]=\"inputElementId\"\n [class]=\"dropdownMenuClasses()\"\n [id]=\"`${inputElementId}-listbox`\"\n [class.show]=\"isVisible && (showOptions || showLoadingWithResults || showNoResults)\"\n cDropdownMenu\n role=\"listbox\"\n >\n @if (showDropdown) {\n <c-autocomplete-options\n #optionsRef\n [delay]=\"delay()\"\n [highlightOptionsOnSearch]=\"highlightOptionsOnSearch()\"\n [itemSize]=\"itemSize()\"\n [loading]=\"isLoading\"\n [optionGroupTemplate]=\"optionGroupTemplate()\"\n [optionTemplate]=\"optionTemplate()\"\n [optionsMaxHeight]=\"optionsMaxHeight()\"\n [options]=\"allOptions\"\n [searchNoResultsLabel]=\"searchNoResultsLabel()\"\n [searchValue]=\"searchVal\"\n [search]=\"search()\"\n [selected]=\"selectedVal\"\n [virtualScroller]=\"virtualScroller()\"\n [visibleItems]=\"visibleItems()\"\n tabindex=\"-1\"\n />\n } @else if (showNoResults) {\n <div class=\"autocomplete-options-empty\" role=\"status\">{{ noResultsLabel }}</div>\n }\n @if (showLoadingWithResults) {\n <c-element-cover [style]=\"{'border-radius': '6px', 'z-index': 2}\" />\n }\n </div>\n }\n </div>\n</c-dropdown>\n", styles: [":host{display:block}:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:not(:last-child):has(+[class*=valid-],+[class*=invalid-]) .autocomplete-input-group,:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:last-child .autocomplete-input-group{border-start-end-radius:var(--cui-autocomplete-border-radius);border-end-end-radius:var(--cui-autocomplete-border-radius)}\n"], dependencies: [{ kind: "directive", type: CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "component", type: AutocompleteOptionsComponent, selector: "c-autocomplete-options", inputs: ["delay", "highlightOptionsOnSearch", "loading", "itemSize", "options", "optionsMaxHeight", "optionTemplate", "optionGroupTemplate", "search", "searchNoResultsLabel", "searchValue", "selected", "virtualScroller", "visibleItems"], outputs: ["optionClick"] }, { kind: "component", type: DropdownComponent, selector: "c-dropdown", inputs: ["alignment", "autoClose", "direction", "placement", "popper", "popperOptions", "variant", "visible"], outputs: ["visibleChange"], exportAs: ["cDropdown"] }, { kind: "directive", type: DropdownToggleDirective, selector: "[cDropdownToggle]", inputs: ["dropdownComponent", "disabled", "caret", "split"], exportAs: ["cDropdownToggle"] }, { kind: "directive", type: DropdownMenuDirective, selector: "[cDropdownMenu]", inputs: ["alignment", "visible"], exportAs: ["cDropdownMenu"] }, { kind: "component", type: ElementCoverComponent, selector: "c-element-cover, [cElementCover]", inputs: ["boundaries", "opacity"] }], changeDetection: i0.ChangeDetectionStrategy.Eager });
4059
4088
  }
4060
4089
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
4061
4090
  type: Component,
@@ -4071,8 +4100,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
4071
4100
  '[class]': 'hostClasses()',
4072
4101
  '(keydown)': 'handleGlobalSearch($event)',
4073
4102
  ngSkipHydration: 'true'
4074
- }, changeDetection: ChangeDetectionStrategy.Eager, providers: [AutocompleteService], template: "@let inputElementId = inputPortalContent().nativeElement.getAttribute('id');\n@let allOptions = options();\n@let isDisabled = disabled();\n@let searchVal = searchValue();\n@let selectedVal = selected() ?? null;\n@let hint = hintValue();\n@let hasCleaner = cleaner();\n@let hasIndicator = indicator();\n\n<ng-template [cdkPortalOutlet]=\"domTogglerPortal()\" />\n<ng-template [cdkPortalOutlet]=\"domDropdownMenuPortal()\" />\n\n<c-dropdown\n #dropdownRef=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [popperOptions]=\"popperOptions()\"\n class=\"d-flex\"\n>\n <div\n #dropdownToggleRef=\"cDropdownToggle\"\n [caret]=\"false\"\n [disabled]=\"isDisabled\"\n cDropdownToggle\n class=\"autocomplete-input-group\"\n role=\"button\"\n >\n @if (showHints() && (!!searchVal || (hint && !searchVal && !selectedVal))) {\n <input\n #inputHintRef\n [id]=\"`${inputElementId}-hint`\"\n [value]=\"hint\"\n aria-hidden=\"true\"\n autoComplete=\"off\"\n class=\"autocomplete-input autocomplete-input-hint\"\n readOnly\n tabIndex=\"-1\"\n />\n }\n\n <span style=\"display: contents\">\n <ng-template [cdkPortalOutlet]=\"domInputPortal()\" />\n </span>\n\n @if (hasCleaner || hasIndicator) {\n <div class=\"autocomplete-buttons\">\n @if (!isDisabled && !readOnly() && hasCleaner && selectedVal) {\n <button\n #cleanerRef\n (click)=\"handleClear($event)\"\n class=\"autocomplete-cleaner\"\n tabindex=\"-1\"\n type=\"button\"\n ></button>\n }\n @if (hasIndicator) {\n <button\n #indicatorRef\n (click)=\"handleIndicatorClick($event)\"\n [disabled]=\"isDisabled || !(searchNoResultsLabel() || allOptions.length > 0) && isExternalSearch(search())\"\n class=\"autocomplete-indicator\"\n tabindex=\"-1\"\n type=\"button\"\n ></button>\n }\n </div>\n }\n </div>\n\n <div #dropdownMenuRef>\n @let showDropdown = show();\n @let noResultsLabel = searchNoResultsLabel();\n @let isLoading = loading();\n @let isVisible = dropdownRef.visible();\n @let showOptions = allOptions.length && !isLoading;\n @let showLoadingWithResults = isLoading && searchVal && allOptions.length;\n @let showNoResults = !isLoading && noResultsLabel && searchVal && !allOptions.length;\n @if (!isDisabled) {\n <div\n #dropdownMenu=\"cDropdownMenu\"\n [attr.aria-labelledby]=\"inputElementId\"\n [class]=\"dropdownMenuClasses()\"\n [id]=\"`${inputElementId}-listbox`\"\n [class.show]=\"isVisible && (showOptions || showLoadingWithResults || showNoResults)\"\n cDropdownMenu\n role=\"listbox\"\n >\n @if (showDropdown) {\n <c-autocomplete-options\n #optionsRef\n [delay]=\"delay()\"\n [highlightOptionsOnSearch]=\"highlightOptionsOnSearch()\"\n [itemSize]=\"itemSize()\"\n [loading]=\"isLoading\"\n [optionGroupTemplate]=\"optionGroupTemplate()\"\n [optionTemplate]=\"optionTemplate()\"\n [optionsMaxHeight]=\"optionsMaxHeight()\"\n [options]=\"allOptions\"\n [searchNoResultsLabel]=\"searchNoResultsLabel()\"\n [searchValue]=\"searchVal\"\n [search]=\"search()\"\n [selected]=\"selectedVal\"\n [virtualScroller]=\"virtualScroller()\"\n [visibleItems]=\"visibleItems()\"\n tabindex=\"-1\"\n />\n } @else if (showNoResults) {\n <div class=\"autocomplete-options-empty\">{{ noResultsLabel }}</div>\n }\n @if (showLoadingWithResults) {\n <c-element-cover [style]=\"{'border-radius': '6px', 'z-index': 2}\" />\n }\n </div>\n }\n </div>\n</c-dropdown>\n", styles: [":host{display:block}:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:not(:last-child):has(+[class*=valid-],+[class*=invalid-]) .autocomplete-input-group,:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:last-child .autocomplete-input-group{border-start-end-radius:var(--cui-autocomplete-border-radius);border-end-end-radius:var(--cui-autocomplete-border-radius)}\n"] }]
4075
- }], propDecorators: { dropdownMenuRef: [{ type: i0.ViewChild, args: ['dropdownMenuRef', { ...{ read: ElementRef }, isSignal: true }] }], togglerRef: [{ type: i0.ViewChild, args: ['dropdownToggleRef', { ...{ read: ElementRef }, isSignal: true }] }], cleanerRef: [{ type: i0.ViewChild, args: ['cleanerRef', { ...{ read: ElementRef }, isSignal: true }] }], indicatorRef: [{ type: i0.ViewChild, args: ['indicatorRef', { ...{ read: ElementRef }, isSignal: true }] }], optionsRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AutocompleteOptionsComponent), { isSignal: true }] }], inputPortalContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputPortalContent", required: true }] }], allowOnlyDefinedOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowOnlyDefinedOptions", required: false }] }], cleaner: [{ type: i0.Input, args: [{ isSignal: true, alias: "cleaner", required: false }] }], clearSearchOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSearchOnSelect", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], highlightOptionsOnSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightOptionsOnSearch", required: false }] }], indicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicator", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], optionsMaxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsMaxHeight", required: false }] }], optionTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionTemplate", required: false }] }], optionGroupTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionGroupTemplate", required: false }] }], popperOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "popperOptions", required: true }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }], searchNoResultsLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchNoResultsLabel", required: false }] }], showHints: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHints", required: false }] }], sizing: [{ type: i0.Input, args: [{ isSignal: true, alias: "sizing", required: false }] }], valid: [{ type: i0.Input, args: [{ isSignal: true, alias: "valid", required: false }] }], virtualScroller: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtualScroller", required: false }] }], visibleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], visibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibleItems", required: false }] }], inputChange: [{ type: i0.Output, args: ["inputChange"] }], optionChange: [{ type: i0.Output, args: ["optionChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
4103
+ }, changeDetection: ChangeDetectionStrategy.Eager, providers: [AutocompleteService], template: "@let inputElementId = inputPortalContent().nativeElement.getAttribute('id');\n@let allOptions = options();\n@let isDisabled = disabled();\n@let searchVal = searchValue();\n@let selectedVal = selected() ?? null;\n@let hint = hintValue();\n@let hasCleaner = cleaner();\n@let hasIndicator = indicator();\n\n<ng-template [cdkPortalOutlet]=\"domTogglerPortal()\" />\n<ng-template [cdkPortalOutlet]=\"domDropdownMenuPortal()\" />\n\n<c-dropdown\n #dropdownRef=\"cDropdown\"\n [(visible)]=\"visible\"\n [autoClose]=\"'outside'\"\n [popperOptions]=\"popperOptions()\"\n class=\"d-flex\"\n>\n <div\n #dropdownToggleRef=\"cDropdownToggle\"\n [caret]=\"false\"\n [disabled]=\"isDisabled\"\n cDropdownToggle\n class=\"autocomplete-input-group\"\n role=\"button\"\n >\n @if (showHints() && (!!searchVal || (hint && !searchVal && !selectedVal))) {\n <input\n #inputHintRef\n [id]=\"`${inputElementId}-hint`\"\n [value]=\"hint\"\n aria-hidden=\"true\"\n autoComplete=\"off\"\n class=\"autocomplete-input autocomplete-input-hint\"\n readOnly\n tabIndex=\"-1\"\n />\n }\n\n <span style=\"display: contents\">\n <ng-template [cdkPortalOutlet]=\"domInputPortal()\" />\n </span>\n\n @if (hasCleaner || hasIndicator) {\n <div class=\"autocomplete-buttons\">\n @if (!isDisabled && !readOnly() && hasCleaner && selectedVal) {\n <button\n #cleanerRef\n (click)=\"handleClear($event)\"\n [attr.aria-label]=\"ariaCleanerLabel()\"\n class=\"autocomplete-cleaner\"\n tabindex=\"-1\"\n type=\"button\"\n ></button>\n }\n @if (hasIndicator) {\n <button\n #indicatorRef\n (click)=\"handleIndicatorClick($event)\"\n [disabled]=\"isDisabled || !(searchNoResultsLabel() || allOptions.length > 0) && isExternalSearch(search())\"\n [attr.aria-label]=\"ariaIndicatorLabel()\"\n class=\"autocomplete-indicator\"\n tabindex=\"-1\"\n type=\"button\"\n ></button>\n }\n </div>\n }\n </div>\n\n <div #dropdownMenuRef>\n @let showDropdown = show();\n @let noResultsLabel = searchNoResultsLabel();\n @let isLoading = loading();\n @let isVisible = dropdownRef.visible();\n @let showOptions = allOptions.length && !isLoading;\n @let showLoadingWithResults = isLoading && searchVal && allOptions.length;\n @let showNoResults = !isLoading && noResultsLabel && searchVal && !allOptions.length;\n @if (!isDisabled) {\n <div\n #dropdownMenu=\"cDropdownMenu\"\n [attr.aria-labelledby]=\"inputElementId\"\n [class]=\"dropdownMenuClasses()\"\n [id]=\"`${inputElementId}-listbox`\"\n [class.show]=\"isVisible && (showOptions || showLoadingWithResults || showNoResults)\"\n cDropdownMenu\n role=\"listbox\"\n >\n @if (showDropdown) {\n <c-autocomplete-options\n #optionsRef\n [delay]=\"delay()\"\n [highlightOptionsOnSearch]=\"highlightOptionsOnSearch()\"\n [itemSize]=\"itemSize()\"\n [loading]=\"isLoading\"\n [optionGroupTemplate]=\"optionGroupTemplate()\"\n [optionTemplate]=\"optionTemplate()\"\n [optionsMaxHeight]=\"optionsMaxHeight()\"\n [options]=\"allOptions\"\n [searchNoResultsLabel]=\"searchNoResultsLabel()\"\n [searchValue]=\"searchVal\"\n [search]=\"search()\"\n [selected]=\"selectedVal\"\n [virtualScroller]=\"virtualScroller()\"\n [visibleItems]=\"visibleItems()\"\n tabindex=\"-1\"\n />\n } @else if (showNoResults) {\n <div class=\"autocomplete-options-empty\" role=\"status\">{{ noResultsLabel }}</div>\n }\n @if (showLoadingWithResults) {\n <c-element-cover [style]=\"{'border-radius': '6px', 'z-index': 2}\" />\n }\n </div>\n }\n </div>\n</c-dropdown>\n", styles: [":host{display:block}:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:not(:last-child):has(+[class*=valid-],+[class*=invalid-]) .autocomplete-input-group,:host-context(.input-group.has-validation,.input-group:not(.has-validation)) :host:last-child .autocomplete-input-group{border-start-end-radius:var(--cui-autocomplete-border-radius);border-end-end-radius:var(--cui-autocomplete-border-radius)}\n"] }]
4104
+ }], propDecorators: { dropdownMenuRef: [{ type: i0.ViewChild, args: ['dropdownMenuRef', { ...{ read: ElementRef }, isSignal: true }] }], togglerRef: [{ type: i0.ViewChild, args: ['dropdownToggleRef', { ...{ read: ElementRef }, isSignal: true }] }], cleanerRef: [{ type: i0.ViewChild, args: ['cleanerRef', { ...{ read: ElementRef }, isSignal: true }] }], indicatorRef: [{ type: i0.ViewChild, args: ['indicatorRef', { ...{ read: ElementRef }, isSignal: true }] }], optionsRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AutocompleteOptionsComponent), { isSignal: true }] }], inputPortalContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputPortalContent", required: true }] }], allowOnlyDefinedOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowOnlyDefinedOptions", required: false }] }], ariaCleanerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaCleanerLabel", required: false }] }], ariaIndicatorLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaIndicatorLabel", required: false }] }], cleaner: [{ type: i0.Input, args: [{ isSignal: true, alias: "cleaner", required: false }] }], clearSearchOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSearchOnSelect", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], highlightOptionsOnSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightOptionsOnSearch", required: false }] }], indicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicator", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], optionsMaxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsMaxHeight", required: false }] }], optionTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionTemplate", required: false }] }], optionGroupTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionGroupTemplate", required: false }] }], popperOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "popperOptions", required: true }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }], searchNoResultsLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchNoResultsLabel", required: false }] }], showHints: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHints", required: false }] }], sizing: [{ type: i0.Input, args: [{ isSignal: true, alias: "sizing", required: false }] }], valid: [{ type: i0.Input, args: [{ isSignal: true, alias: "valid", required: false }] }], virtualScroller: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtualScroller", required: false }] }], visibleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], visibleItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibleItems", required: false }] }], inputChange: [{ type: i0.Output, args: ["inputChange"] }], optionChange: [{ type: i0.Output, args: ["optionChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
4076
4105
 
4077
4106
  class AutocompleteDirective {
4078
4107
  writeValue(value) {
@@ -4150,6 +4179,20 @@ class AutocompleteDirective {
4150
4179
  * @default false
4151
4180
  */
4152
4181
  allowOnlyDefinedOptions = input(false, { ...(ngDevMode ? { debugName: "allowOnlyDefinedOptions" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
4182
+ /**
4183
+ * Sets the accessible label (`aria-label`) for the button that clears the current selection. This improves accessibility for screen readers.
4184
+ * @return string
4185
+ * @since 5.7.7
4186
+ */
4187
+ ariaCleanerLabel = input('Clear selection', /* @ts-ignore */
4188
+ ...(ngDevMode ? [{ debugName: "ariaCleanerLabel" }] : /* istanbul ignore next */ []));
4189
+ /**
4190
+ * Sets the accessible label (`aria-label`) for the dropdown toggle indicator button. This improves accessibility for screen readers.
4191
+ * @return string
4192
+ * @since 5.7.7
4193
+ */
4194
+ ariaIndicatorLabel = input('Toggle visibility of options menu', /* @ts-ignore */
4195
+ ...(ngDevMode ? [{ debugName: "ariaIndicatorLabel" }] : /* istanbul ignore next */ []));
4153
4196
  /**
4154
4197
  * Enables selection cleaner element.
4155
4198
  * When `true`, displays a clear button that allows users to reset the selection.
@@ -4476,6 +4519,8 @@ class AutocompleteDirective {
4476
4519
  bindings: [
4477
4520
  inputBinding('inputPortalContent', () => this.#hostElement),
4478
4521
  inputBinding('allowOnlyDefinedOptions', this.allowOnlyDefinedOptions),
4522
+ inputBinding('ariaCleanerLabel', this.ariaCleanerLabel),
4523
+ inputBinding('ariaIndicatorLabel', this.ariaIndicatorLabel),
4479
4524
  inputBinding('cleaner', this.cleaner),
4480
4525
  inputBinding('clearSearchOnSelect', this.clearSearchOnSelect),
4481
4526
  inputBinding('delay', this.delay),
@@ -4708,7 +4753,7 @@ class AutocompleteDirective {
4708
4753
  this.#hostElement.nativeElement.focus();
4709
4754
  }
4710
4755
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: AutocompleteDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4711
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: AutocompleteDirective, isStandalone: true, selector: "input[cAutocomplete]", inputs: { popperOptionsInput: { classPropertyName: "popperOptionsInput", publicName: "popperOptions", isSignal: true, isRequired: false, transformFunction: null }, allowOnlyDefinedOptions: { classPropertyName: "allowOnlyDefinedOptions", publicName: "allowOnlyDefinedOptions", isSignal: true, isRequired: false, transformFunction: null }, cleaner: { classPropertyName: "cleaner", publicName: "cleaner", isSignal: true, isRequired: false, transformFunction: null }, clearSearchOnSelect: { classPropertyName: "clearSearchOnSelect", publicName: "clearSearchOnSelect", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, highlightOptionsOnSearch: { classPropertyName: "highlightOptionsOnSearch", publicName: "highlightOptionsOnSearch", isSignal: true, isRequired: false, transformFunction: null }, idInput: { classPropertyName: "idInput", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, indicator: { classPropertyName: "indicator", publicName: "indicator", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, optionsInput: { classPropertyName: "optionsInput", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, optionsMaxHeightInput: { classPropertyName: "optionsMaxHeightInput", publicName: "optionsMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, optionTemplate: { classPropertyName: "optionTemplate", publicName: "optionTemplate", isSignal: true, isRequired: false, transformFunction: null }, optionGroupTemplate: { classPropertyName: "optionGroupTemplate", publicName: "optionGroupTemplate", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, resetSelectionOnOptionsChange: { classPropertyName: "resetSelectionOnOptionsChange", publicName: "resetSelectionOnOptionsChange", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, searchNoResultsLabel: { classPropertyName: "searchNoResultsLabel", publicName: "searchNoResultsLabel", isSignal: true, isRequired: false, transformFunction: null }, showHints: { classPropertyName: "showHints", publicName: "showHints", isSignal: true, isRequired: false, transformFunction: null }, sizing: { classPropertyName: "sizing", publicName: "sizing", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, virtualScroller: { classPropertyName: "virtualScroller", publicName: "virtualScroller", isSignal: true, isRequired: false, transformFunction: null }, visibleInput: { classPropertyName: "visibleInput", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, visibleItemsInput: { classPropertyName: "visibleItemsInput", publicName: "visibleItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { inputChange: "inputChange", optionChange: "optionChange", valueChange: "valueChange", visibleChange: "visibleChange" }, host: { attributes: { "type": "text" }, properties: { "attr.autocomplete": "\"off\"", "attr.aria-autocomplete": "\"list\"", "attr.aria-haspopup": "\"listbox\"", "attr.aria-expanded": "visible()", "attr.aria-controls": "`${id()}-listbox`", "attr.aria-activedescendant": "null", "attr.aria-owns": "`${id()}-listbox`", "attr.disabled": "disabledState() || null", "attr.id": "id()", "attr.readonly": "readOnly() || null", "attr.role": "\"combobox\"" }, classAttribute: "autocomplete-input" }, providers: [
4756
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.7", type: AutocompleteDirective, isStandalone: true, selector: "input[cAutocomplete]", inputs: { popperOptionsInput: { classPropertyName: "popperOptionsInput", publicName: "popperOptions", isSignal: true, isRequired: false, transformFunction: null }, allowOnlyDefinedOptions: { classPropertyName: "allowOnlyDefinedOptions", publicName: "allowOnlyDefinedOptions", isSignal: true, isRequired: false, transformFunction: null }, ariaCleanerLabel: { classPropertyName: "ariaCleanerLabel", publicName: "ariaCleanerLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaIndicatorLabel: { classPropertyName: "ariaIndicatorLabel", publicName: "ariaIndicatorLabel", isSignal: true, isRequired: false, transformFunction: null }, cleaner: { classPropertyName: "cleaner", publicName: "cleaner", isSignal: true, isRequired: false, transformFunction: null }, clearSearchOnSelect: { classPropertyName: "clearSearchOnSelect", publicName: "clearSearchOnSelect", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, highlightOptionsOnSearch: { classPropertyName: "highlightOptionsOnSearch", publicName: "highlightOptionsOnSearch", isSignal: true, isRequired: false, transformFunction: null }, idInput: { classPropertyName: "idInput", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, indicator: { classPropertyName: "indicator", publicName: "indicator", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, optionsInput: { classPropertyName: "optionsInput", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, optionsMaxHeightInput: { classPropertyName: "optionsMaxHeightInput", publicName: "optionsMaxHeight", isSignal: true, isRequired: false, transformFunction: null }, optionTemplate: { classPropertyName: "optionTemplate", publicName: "optionTemplate", isSignal: true, isRequired: false, transformFunction: null }, optionGroupTemplate: { classPropertyName: "optionGroupTemplate", publicName: "optionGroupTemplate", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, resetSelectionOnOptionsChange: { classPropertyName: "resetSelectionOnOptionsChange", publicName: "resetSelectionOnOptionsChange", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null }, searchNoResultsLabel: { classPropertyName: "searchNoResultsLabel", publicName: "searchNoResultsLabel", isSignal: true, isRequired: false, transformFunction: null }, showHints: { classPropertyName: "showHints", publicName: "showHints", isSignal: true, isRequired: false, transformFunction: null }, sizing: { classPropertyName: "sizing", publicName: "sizing", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, virtualScroller: { classPropertyName: "virtualScroller", publicName: "virtualScroller", isSignal: true, isRequired: false, transformFunction: null }, visibleInput: { classPropertyName: "visibleInput", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, visibleItemsInput: { classPropertyName: "visibleItemsInput", publicName: "visibleItems", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { inputChange: "inputChange", optionChange: "optionChange", valueChange: "valueChange", visibleChange: "visibleChange" }, host: { attributes: { "type": "text" }, properties: { "attr.autocomplete": "\"off\"", "attr.aria-autocomplete": "\"list\"", "attr.aria-haspopup": "\"listbox\"", "attr.aria-expanded": "visible()", "attr.aria-controls": "`${id()}-listbox`", "attr.aria-activedescendant": "null", "attr.aria-owns": "`${id()}-listbox`", "attr.disabled": "disabledState() || null", "attr.id": "id()", "attr.readonly": "readOnly() || null", "attr.role": "\"combobox\"" }, classAttribute: "autocomplete-input" }, providers: [
4712
4757
  {
4713
4758
  provide: NG_VALUE_ACCESSOR,
4714
4759
  useExisting: forwardRef(() => AutocompleteDirective),
@@ -4747,7 +4792,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
4747
4792
  }
4748
4793
  ]
4749
4794
  }]
4750
- }], propDecorators: { popperOptionsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "popperOptions", required: false }] }], allowOnlyDefinedOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowOnlyDefinedOptions", required: false }] }], cleaner: [{ type: i0.Input, args: [{ isSignal: true, alias: "cleaner", required: false }] }], clearSearchOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSearchOnSelect", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], highlightOptionsOnSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightOptionsOnSearch", required: false }] }], idInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], indicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicator", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], optionsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], optionsMaxHeightInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsMaxHeight", required: false }] }], optionTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionTemplate", required: false }] }], optionGroupTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionGroupTemplate", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], resetSelectionOnOptionsChange: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetSelectionOnOptionsChange", required: false }] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }], searchNoResultsLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchNoResultsLabel", required: false }] }], showHints: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHints", required: false }] }], sizing: [{ type: i0.Input, args: [{ isSignal: true, alias: "sizing", required: false }] }], valid: [{ type: i0.Input, args: [{ isSignal: true, alias: "valid", required: false }] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], virtualScroller: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtualScroller", required: false }] }], visibleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], visibleItemsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibleItems", required: false }] }], inputChange: [{ type: i0.Output, args: ["inputChange"] }], optionChange: [{ type: i0.Output, args: ["optionChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
4795
+ }], propDecorators: { popperOptionsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "popperOptions", required: false }] }], allowOnlyDefinedOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowOnlyDefinedOptions", required: false }] }], ariaCleanerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaCleanerLabel", required: false }] }], ariaIndicatorLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaIndicatorLabel", required: false }] }], cleaner: [{ type: i0.Input, args: [{ isSignal: true, alias: "cleaner", required: false }] }], clearSearchOnSelect: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearSearchOnSelect", required: false }] }], delay: [{ type: i0.Input, args: [{ isSignal: true, alias: "delay", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], highlightOptionsOnSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightOptionsOnSearch", required: false }] }], idInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], indicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "indicator", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], optionsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], optionsMaxHeightInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionsMaxHeight", required: false }] }], optionTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionTemplate", required: false }] }], optionGroupTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "optionGroupTemplate", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], resetSelectionOnOptionsChange: [{ type: i0.Input, args: [{ isSignal: true, alias: "resetSelectionOnOptionsChange", required: false }] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }], searchNoResultsLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchNoResultsLabel", required: false }] }], showHints: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHints", required: false }] }], sizing: [{ type: i0.Input, args: [{ isSignal: true, alias: "sizing", required: false }] }], valid: [{ type: i0.Input, args: [{ isSignal: true, alias: "valid", required: false }] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], virtualScroller: [{ type: i0.Input, args: [{ isSignal: true, alias: "virtualScroller", required: false }] }], visibleInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], visibleItemsInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "visibleItems", required: false }] }], inputChange: [{ type: i0.Output, args: ["inputChange"] }], optionChange: [{ type: i0.Output, args: ["optionChange"] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
4751
4796
 
4752
4797
  class AutocompleteModule {
4753
4798
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: AutocompleteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -9082,6 +9127,13 @@ class FormPasswordActionComponent {
9082
9127
  */
9083
9128
  ariaLabelToggler = input('Toggle password visibility', /* @ts-ignore */
9084
9129
  ...(ngDevMode ? [{ debugName: "ariaLabelToggler" }] : /* istanbul ignore next */ []));
9130
+ /**
9131
+ * Sets the `aria-pressed` state for the toggle password visibility button, reflecting whether the password is currently visible.
9132
+ * @default false
9133
+ * @since 5.7.7
9134
+ */
9135
+ ariaPressed = input(false, /* @ts-ignore */
9136
+ ...(ngDevMode ? [{ debugName: "ariaPressed" }] : /* istanbul ignore next */ []));
9085
9137
  /**
9086
9138
  * Sets disabled state of the toggle password visibility button. When `true`, the user cannot interact with the button.
9087
9139
  * @default false
@@ -9093,12 +9145,12 @@ class FormPasswordActionComponent {
9093
9145
  $event.currentTarget?.focus();
9094
9146
  }
9095
9147
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: FormPasswordActionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9096
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: FormPasswordActionComponent, isStandalone: true, selector: "c-form-password-action", inputs: { ariaLabelToggler: { classPropertyName: "ariaLabelToggler", publicName: "ariaLabelToggler", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<button\n [attr.aria-label]=\"ariaLabelToggler()\"\n class=\"form-password-action\"\n data-coreui-toggle=\"password\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick($event)\"\n>\n <span class=\"form-password-action-icon\"></span>\n</button>\n", styles: [":host{display:none}\n"] });
9148
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.7", type: FormPasswordActionComponent, isStandalone: true, selector: "c-form-password-action", inputs: { ariaLabelToggler: { classPropertyName: "ariaLabelToggler", publicName: "ariaLabelToggler", isSignal: true, isRequired: false, transformFunction: null }, ariaPressed: { classPropertyName: "ariaPressed", publicName: "ariaPressed", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<button\n [attr.aria-label]=\"ariaLabelToggler()\"\n [attr.aria-pressed]=\"ariaPressed()\"\n class=\"form-password-action\"\n data-coreui-toggle=\"password\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick($event)\"\n>\n <span class=\"form-password-action-icon\"></span>\n</button>\n", styles: [":host{display:none}\n"] });
9097
9149
  }
9098
9150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: FormPasswordActionComponent, decorators: [{
9099
9151
  type: Component,
9100
- args: [{ selector: 'c-form-password-action', template: "<button\n [attr.aria-label]=\"ariaLabelToggler()\"\n class=\"form-password-action\"\n data-coreui-toggle=\"password\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick($event)\"\n>\n <span class=\"form-password-action-icon\"></span>\n</button>\n", styles: [":host{display:none}\n"] }]
9101
- }], propDecorators: { ariaLabelToggler: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabelToggler", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
9152
+ args: [{ selector: 'c-form-password-action', template: "<button\n [attr.aria-label]=\"ariaLabelToggler()\"\n [attr.aria-pressed]=\"ariaPressed()\"\n class=\"form-password-action\"\n data-coreui-toggle=\"password\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"handleClick($event)\"\n>\n <span class=\"form-password-action-icon\"></span>\n</button>\n", styles: [":host{display:none}\n"] }]
9153
+ }], propDecorators: { ariaLabelToggler: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabelToggler", required: false }] }], ariaPressed: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaPressed", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
9102
9154
 
9103
9155
  class FormPasswordDirective {
9104
9156
  static ngAcceptInputType_disabled;
@@ -9192,6 +9244,10 @@ class FormPasswordDirective {
9192
9244
  showPassword = input(false, { ...(ngDevMode ? { debugName: "showPassword" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
9193
9245
  #passwordVisible = linkedSignal(this.showPassword, /* @ts-ignore */
9194
9246
  ...(ngDevMode ? [{ debugName: "#passwordVisible" }] : /* istanbul ignore next */ []));
9247
+ #ariaPressedEffect = effect(() => {
9248
+ this.#actionButtonRef.setInput('ariaPressed', this.#passwordVisible());
9249
+ }, /* @ts-ignore */
9250
+ ...(ngDevMode ? [{ debugName: "#ariaPressedEffect" }] : /* istanbul ignore next */ []));
9195
9251
  /**
9196
9252
  * Specifies the type of input element.
9197
9253
  */
@@ -15378,6 +15434,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
15378
15434
  const coerceStringArray = (value) => (Array.isArray(value) ? [...value] : [value]);
15379
15435
  const coerceRatingPrecision = (value) => [1, 0.5, 0.25].includes(numberAttribute(value)) ? numberAttribute(value) : 1;
15380
15436
  const coerceNumber = (value) => Number(value ?? 0);
15437
+ const coerceRatingValue = (value) => value === null || value === undefined ? null : numberAttribute(value);
15381
15438
  class RatingComponent {
15382
15439
  // Treats input as boolean value, even if provided as string or other types. Uses angular coercion mechanism
15383
15440
  static ngAcceptInputType_itemCount;
@@ -15403,6 +15460,14 @@ class RatingComponent {
15403
15460
  * @returns: string | string[]
15404
15461
  */
15405
15462
  activeIcon = input([], { ...(ngDevMode ? { debugName: "activeIcon" } : /* istanbul ignore next */ {}), transform: coerceStringArray });
15463
+ /**
15464
+ * Function that returns the accessible label (`aria-label`) for each rating item. Receives the item's value and the total item count.
15465
+ * @returns: (value: number, itemCount: number) => string
15466
+ * @default: (value, itemCount) => `${value} of ${itemCount}`
15467
+ * @since: 5.7.7
15468
+ */
15469
+ ariaLabel = input((value, itemCount) => `${value} of ${itemCount}`, /* @ts-ignore */
15470
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
15406
15471
  /**
15407
15472
  * Enables the clearing upon clicking the selected item again.
15408
15473
  * @returns: boolean
@@ -15473,7 +15538,9 @@ class RatingComponent {
15473
15538
  * @default: null
15474
15539
  * Emits `valueChange` on value change
15475
15540
  */
15476
- value = model(null, /* @ts-ignore */
15541
+ valueInput = model(null, { ...(ngDevMode ? { debugName: "valueInput" } : /* istanbul ignore next */ {}), alias: 'value' });
15542
+ // Ensures `value` is always a number (or null), even if a string is passed in, e.g. via attribute binding.
15543
+ value = linkedSignal(() => coerceRatingValue(this.valueInput()), /* @ts-ignore */
15477
15544
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
15478
15545
  /**
15479
15546
  * Event emitted on hoverValue change.
@@ -15624,7 +15691,7 @@ class RatingComponent {
15624
15691
  this.#disabledState.set(isDisabled);
15625
15692
  }
15626
15693
  writeValue(value) {
15627
- this.value.set(value);
15694
+ this.valueInput.set(value);
15628
15695
  }
15629
15696
  isItemActive(value) {
15630
15697
  const localValue = this.hoverValue() ?? this.value() ?? -1;
@@ -15648,11 +15715,11 @@ class RatingComponent {
15648
15715
  }
15649
15716
  if (this.allowClear() && value === this.value()) {
15650
15717
  this.#cleared.set(true);
15651
- this.value.set(null);
15718
+ this.valueInput.set(null);
15652
15719
  this.hoverValue.set(null);
15653
15720
  }
15654
15721
  else {
15655
- this.value.set(value);
15722
+ this.valueInput.set(value);
15656
15723
  }
15657
15724
  }
15658
15725
  handleMouseEnter($event, value) {
@@ -15701,13 +15768,13 @@ class RatingComponent {
15701
15768
  }, /* @ts-ignore */
15702
15769
  ...(ngDevMode ? [{ debugName: "#valueEffect" }] : /* istanbul ignore next */ []));
15703
15770
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15704
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RatingComponent, isStandalone: true, selector: "c-rating", inputs: { activeIcon: { classPropertyName: "activeIcon", publicName: "activeIcon", isSignal: true, isRequired: false, transformFunction: null }, allowClear: { classPropertyName: "allowClear", publicName: "allowClear", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, highlightOnlySelected: { classPropertyName: "highlightOnlySelected", publicName: "highlightOnlySelected", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, itemCount: { classPropertyName: "itemCount", publicName: "itemCount", isSignal: true, isRequired: false, transformFunction: null }, precision: { classPropertyName: "precision", publicName: "precision", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tooltips: { classPropertyName: "tooltips", publicName: "tooltips", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", hoverValueChange: "hoverValueChange" }, host: { attributes: { "role": "radiogroup" }, listeners: { "keydown": "onKeyDown($event)" }, properties: { "attr.aria-disabled": "ratingDisabled()", "attr.aria-valueNow": "value()", "attr.aria-valuemax": "itemCount()", "class": "hostClasses()" } }, providers: [
15771
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RatingComponent, isStandalone: true, selector: "c-rating", inputs: { activeIcon: { classPropertyName: "activeIcon", publicName: "activeIcon", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, allowClear: { classPropertyName: "allowClear", publicName: "allowClear", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, highlightOnlySelected: { classPropertyName: "highlightOnlySelected", publicName: "highlightOnlySelected", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, itemCount: { classPropertyName: "itemCount", publicName: "itemCount", isSignal: true, isRequired: false, transformFunction: null }, precision: { classPropertyName: "precision", publicName: "precision", isSignal: true, isRequired: false, transformFunction: null }, readOnly: { classPropertyName: "readOnly", publicName: "readOnly", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, tooltips: { classPropertyName: "tooltips", publicName: "tooltips", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueInput: "valueChange", hoverValueChange: "hoverValueChange" }, host: { attributes: { "role": "radiogroup" }, listeners: { "keydown": "onKeyDown($event)" }, properties: { "attr.aria-disabled": "ratingDisabled()", "attr.aria-valueNow": "value()", "attr.aria-valuemax": "itemCount()", "class": "hostClasses()" } }, providers: [
15705
15772
  {
15706
15773
  provide: NG_VALUE_ACCESSOR,
15707
15774
  useExisting: forwardRef(() => RatingComponent),
15708
15775
  multi: true
15709
15776
  }
15710
- ], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, isSignal: true }], viewQueries: [{ propertyName: "ratingItemLabels", predicate: RatingItemLabelComponent, descendants: true, isSignal: true }], exportAs: ["cRating"], ngImport: i0, template: "@for (item of ratingItems(); track item; let itemIndex = $index, last = $last) {\n @if (tooltips()) {\n <div\n class=\"rating-item\"\n [cTooltip]=\"getTooltipValue(itemIndex)\"\n [cTooltipTrigger]=\"['hover', 'focusin']\"\n (mouseenter)=\"hoveredItem.set(itemIndex)\"\n (focusin)=\"hoveredItem.set(itemIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n } @else {\n <div class=\"rating-item\">\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n }\n}\n\n<ng-template let-item let-itemIndex=\"itemIndex\" #ratingItemLabel>\n @for (itemValue of item; track radioIndex; let radioIndex = $index, last = $last) {\n <c-rating-item-label\n class=\"rating-item-label d-inline-block\"\n role=\"radio\"\n (click)=\"handleClick(itemValue)\"\n (focus)=\"handleFocusIn($event, itemValue)\"\n [class.active]=\"isItemActive(itemValue)\"\n (mouseenter)=\"handleMouseEnter($event, itemValue)\"\n [style]=\"radioIndex + 1 < numberOfSubItems() ? notLastItemStyle(radioIndex) : {}\"\n [value]=\"itemValue\"\n [attr.aria-label]=\"itemValue\"\n [attr.aria-checked]=\"itemValue === value()\"\n >\n @if (iconTemplates()[icon()[itemIndex] ?? icon()]) {\n <ng-container *ngTemplateOutlet=\"customIconTemplate; context: { $implicit: icon()?.[itemIndex] ?? icon() }\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"defaultIconTemplate\" />\n }\n @if (iconTemplates()[activeIcon()[itemIndex] ?? activeIcon()]) {\n <ng-container *ngTemplateOutlet=\"customIconActiveTemplate; context: { $implicit: activeIcon()?.[itemIndex] ?? activeIcon() }\" />\n }\n </c-rating-item-label>\n }\n</ng-template>\n\n<ng-template #tooltipContent>\n <span>{{ hoverValue() }}</span>\n</ng-template>\n\n<ng-template #defaultIconTemplate>\n <div class=\"rating-item-icon\"></div>\n</ng-template>\n\n<ng-template #customIconTemplate let-icon>\n <div class=\"rating-item-custom-icon\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || defaultIconTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #customIconActiveTemplate let-icon>\n <div class=\"rating-item-custom-icon-active\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || customIconTemplate\" />\n </div>\n</ng-template>\n", styles: [":host{display:inline-flex}:is(:host.disabled,:host.readonly) .rating-item-label{cursor:default}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(() => TooltipDirective), selector: "[cTooltip]", inputs: ["cTooltip", "cTooltipOptions", "cTooltipPlacement", "cTooltipRef", "cTooltipTrigger", "cTooltipVisible"], outputs: ["cTooltipVisibleChange"], exportAs: ["cTooltip"] }, { kind: "component", type: i0.forwardRef(() => RatingItemLabelComponent), selector: "c-rating-item-label", inputs: ["label", "value"] }] });
15777
+ ], queries: [{ propertyName: "contentTemplates", predicate: TemplateIdDirective, isSignal: true }], viewQueries: [{ propertyName: "ratingItemLabels", predicate: RatingItemLabelComponent, descendants: true, isSignal: true }], exportAs: ["cRating"], ngImport: i0, template: "@for (item of ratingItems(); track item; let itemIndex = $index, last = $last) {\n @if (tooltips()) {\n <div\n class=\"rating-item\"\n [cTooltip]=\"getTooltipValue(itemIndex)\"\n [cTooltipTrigger]=\"['hover', 'focusin']\"\n (mouseenter)=\"hoveredItem.set(itemIndex)\"\n (focusin)=\"hoveredItem.set(itemIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n } @else {\n <div class=\"rating-item\">\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n }\n}\n\n<ng-template let-item let-itemIndex=\"itemIndex\" #ratingItemLabel>\n @for (itemValue of item; track radioIndex; let radioIndex = $index, last = $last) {\n <c-rating-item-label\n class=\"rating-item-label d-inline-block\"\n role=\"radio\"\n (click)=\"handleClick(itemValue)\"\n (focus)=\"handleFocusIn($event, itemValue)\"\n [class.active]=\"isItemActive(itemValue)\"\n (mouseenter)=\"handleMouseEnter($event, itemValue)\"\n [style]=\"radioIndex + 1 < numberOfSubItems() ? notLastItemStyle(radioIndex) : {}\"\n [value]=\"itemValue\"\n [attr.aria-label]=\"ariaLabel()(itemValue, itemCount())\"\n [attr.aria-checked]=\"itemValue === value()\"\n >\n @if (iconTemplates()[icon()[itemIndex] ?? icon()]) {\n <ng-container *ngTemplateOutlet=\"customIconTemplate; context: { $implicit: icon()?.[itemIndex] ?? icon() }\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"defaultIconTemplate\" />\n }\n @if (iconTemplates()[activeIcon()[itemIndex] ?? activeIcon()]) {\n <ng-container *ngTemplateOutlet=\"customIconActiveTemplate; context: { $implicit: activeIcon()?.[itemIndex] ?? activeIcon() }\" />\n }\n </c-rating-item-label>\n }\n</ng-template>\n\n<ng-template #tooltipContent>\n <span>{{ hoverValue() }}</span>\n</ng-template>\n\n<ng-template #defaultIconTemplate>\n <div class=\"rating-item-icon\"></div>\n</ng-template>\n\n<ng-template #customIconTemplate let-icon>\n <div class=\"rating-item-custom-icon\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || defaultIconTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #customIconActiveTemplate let-icon>\n <div class=\"rating-item-custom-icon-active\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || customIconTemplate\" />\n </div>\n</ng-template>\n", styles: [":host{display:inline-flex}:is(:host.disabled,:host.readonly) .rating-item-label{cursor:default}\n"], dependencies: [{ kind: "directive", type: i0.forwardRef(() => NgTemplateOutlet), selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i0.forwardRef(() => TooltipDirective), selector: "[cTooltip]", inputs: ["cTooltip", "cTooltipOptions", "cTooltipPlacement", "cTooltipRef", "cTooltipTrigger", "cTooltipVisible"], outputs: ["cTooltipVisibleChange"], exportAs: ["cTooltip"] }, { kind: "component", type: i0.forwardRef(() => RatingItemLabelComponent), selector: "c-rating-item-label", inputs: ["label", "value"] }] });
15711
15778
  }
15712
15779
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RatingComponent, decorators: [{
15713
15780
  type: Component,
@@ -15724,8 +15791,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
15724
15791
  '[class]': 'hostClasses()',
15725
15792
  '(keydown)': 'onKeyDown($event)',
15726
15793
  role: 'radiogroup'
15727
- }, template: "@for (item of ratingItems(); track item; let itemIndex = $index, last = $last) {\n @if (tooltips()) {\n <div\n class=\"rating-item\"\n [cTooltip]=\"getTooltipValue(itemIndex)\"\n [cTooltipTrigger]=\"['hover', 'focusin']\"\n (mouseenter)=\"hoveredItem.set(itemIndex)\"\n (focusin)=\"hoveredItem.set(itemIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n } @else {\n <div class=\"rating-item\">\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n }\n}\n\n<ng-template let-item let-itemIndex=\"itemIndex\" #ratingItemLabel>\n @for (itemValue of item; track radioIndex; let radioIndex = $index, last = $last) {\n <c-rating-item-label\n class=\"rating-item-label d-inline-block\"\n role=\"radio\"\n (click)=\"handleClick(itemValue)\"\n (focus)=\"handleFocusIn($event, itemValue)\"\n [class.active]=\"isItemActive(itemValue)\"\n (mouseenter)=\"handleMouseEnter($event, itemValue)\"\n [style]=\"radioIndex + 1 < numberOfSubItems() ? notLastItemStyle(radioIndex) : {}\"\n [value]=\"itemValue\"\n [attr.aria-label]=\"itemValue\"\n [attr.aria-checked]=\"itemValue === value()\"\n >\n @if (iconTemplates()[icon()[itemIndex] ?? icon()]) {\n <ng-container *ngTemplateOutlet=\"customIconTemplate; context: { $implicit: icon()?.[itemIndex] ?? icon() }\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"defaultIconTemplate\" />\n }\n @if (iconTemplates()[activeIcon()[itemIndex] ?? activeIcon()]) {\n <ng-container *ngTemplateOutlet=\"customIconActiveTemplate; context: { $implicit: activeIcon()?.[itemIndex] ?? activeIcon() }\" />\n }\n </c-rating-item-label>\n }\n</ng-template>\n\n<ng-template #tooltipContent>\n <span>{{ hoverValue() }}</span>\n</ng-template>\n\n<ng-template #defaultIconTemplate>\n <div class=\"rating-item-icon\"></div>\n</ng-template>\n\n<ng-template #customIconTemplate let-icon>\n <div class=\"rating-item-custom-icon\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || defaultIconTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #customIconActiveTemplate let-icon>\n <div class=\"rating-item-custom-icon-active\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || customIconTemplate\" />\n </div>\n</ng-template>\n", styles: [":host{display:inline-flex}:is(:host.disabled,:host.readonly) .rating-item-label{cursor:default}\n"] }]
15728
- }], ctorParameters: () => [], propDecorators: { activeIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeIcon", required: false }] }], allowClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowClear", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], highlightOnlySelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightOnlySelected", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], itemCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemCount", required: false }] }], precision: [{ type: i0.Input, args: [{ isSignal: true, alias: "precision", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], tooltips: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltips", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], hoverValueChange: [{ type: i0.Output, args: ["hoverValueChange"] }], contentTemplates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TemplateIdDirective), { isSignal: true }] }], ratingItemLabels: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => RatingItemLabelComponent), { isSignal: true }] }] } });
15794
+ }, template: "@for (item of ratingItems(); track item; let itemIndex = $index, last = $last) {\n @if (tooltips()) {\n <div\n class=\"rating-item\"\n [cTooltip]=\"getTooltipValue(itemIndex)\"\n [cTooltipTrigger]=\"['hover', 'focusin']\"\n (mouseenter)=\"hoveredItem.set(itemIndex)\"\n (focusin)=\"hoveredItem.set(itemIndex)\"\n >\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n } @else {\n <div class=\"rating-item\">\n <ng-container *ngTemplateOutlet=\"ratingItemLabel; context: { $implicit: item, itemIndex }\" />\n </div>\n }\n}\n\n<ng-template let-item let-itemIndex=\"itemIndex\" #ratingItemLabel>\n @for (itemValue of item; track radioIndex; let radioIndex = $index, last = $last) {\n <c-rating-item-label\n class=\"rating-item-label d-inline-block\"\n role=\"radio\"\n (click)=\"handleClick(itemValue)\"\n (focus)=\"handleFocusIn($event, itemValue)\"\n [class.active]=\"isItemActive(itemValue)\"\n (mouseenter)=\"handleMouseEnter($event, itemValue)\"\n [style]=\"radioIndex + 1 < numberOfSubItems() ? notLastItemStyle(radioIndex) : {}\"\n [value]=\"itemValue\"\n [attr.aria-label]=\"ariaLabel()(itemValue, itemCount())\"\n [attr.aria-checked]=\"itemValue === value()\"\n >\n @if (iconTemplates()[icon()[itemIndex] ?? icon()]) {\n <ng-container *ngTemplateOutlet=\"customIconTemplate; context: { $implicit: icon()?.[itemIndex] ?? icon() }\" />\n } @else {\n <ng-container *ngTemplateOutlet=\"defaultIconTemplate\" />\n }\n @if (iconTemplates()[activeIcon()[itemIndex] ?? activeIcon()]) {\n <ng-container *ngTemplateOutlet=\"customIconActiveTemplate; context: { $implicit: activeIcon()?.[itemIndex] ?? activeIcon() }\" />\n }\n </c-rating-item-label>\n }\n</ng-template>\n\n<ng-template #tooltipContent>\n <span>{{ hoverValue() }}</span>\n</ng-template>\n\n<ng-template #defaultIconTemplate>\n <div class=\"rating-item-icon\"></div>\n</ng-template>\n\n<ng-template #customIconTemplate let-icon>\n <div class=\"rating-item-custom-icon\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || defaultIconTemplate\" />\n </div>\n</ng-template>\n\n<ng-template #customIconActiveTemplate let-icon>\n <div class=\"rating-item-custom-icon-active\">\n <ng-container *ngTemplateOutlet=\"iconTemplates()?.[icon] || customIconTemplate\" />\n </div>\n</ng-template>\n", styles: [":host{display:inline-flex}:is(:host.disabled,:host.readonly) .rating-item-label{cursor:default}\n"] }]
15795
+ }], ctorParameters: () => [], propDecorators: { activeIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeIcon", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], allowClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowClear", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], highlightOnlySelected: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightOnlySelected", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], itemCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemCount", required: false }] }], precision: [{ type: i0.Input, args: [{ isSignal: true, alias: "precision", required: false }] }], readOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readOnly", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], tooltips: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltips", required: false }] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], hoverValueChange: [{ type: i0.Output, args: ["hoverValueChange"] }], contentTemplates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TemplateIdDirective), { isSignal: true }] }], ratingItemLabels: [{ type: i0.ViewChildren, args: [i0.forwardRef(() => RatingItemLabelComponent), { isSignal: true }] }] } });
15729
15796
 
15730
15797
  class RatingModule {
15731
15798
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RatingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -15967,6 +16034,13 @@ class RangeSliderComponent {
15967
16034
  #elementRef = inject(ElementRef);
15968
16035
  #UIDService = inject(UIDService);
15969
16036
  #RtlService = inject(RtlService);
16037
+ /**
16038
+ * Accessible labels (`aria-label`) for the slider handles, one per thumb, applied only to multi-thumb sliders to distinguish otherwise identically-announced handles.
16039
+ * When omitted, two-thumb sliders default to `"Minimum value"` / `"Maximum value"` and sliders with more thumbs to `"Value {n}"`.
16040
+ * @since 5.7.7
16041
+ */
16042
+ ariaLabels = input(/* @ts-ignore */
16043
+ ...(ngDevMode ? [undefined, { debugName: "ariaLabels" }] : /* istanbul ignore next */ []));
15970
16044
  /**
15971
16045
  * Enable or disable clickable labels in the Angular Range Slider.
15972
16046
  * When set to `true`, users can click on labels to adjust the slider's value directly, enhancing interactivity and user experience.
@@ -16067,11 +16141,6 @@ class RangeSliderComponent {
16067
16141
  }, /* @ts-ignore */
16068
16142
  ...(ngDevMode ? [{ debugName: "valueEffect" }] : /* istanbul ignore next */ []));
16069
16143
  #value$ = new BehaviorSubject(this.currentValue());
16070
- valueNow = computed(() => {
16071
- const value = this.currentValue();
16072
- return value.length === 1 ? value[0] : [...value];
16073
- }, /* @ts-ignore */
16074
- ...(ngDevMode ? [{ debugName: "valueNow" }] : /* istanbul ignore next */ []));
16075
16144
  inputIds = signal([], /* @ts-ignore */
16076
16145
  ...(ngDevMode ? [{ debugName: "inputIds" }] : /* istanbul ignore next */ []));
16077
16146
  inputIdsEffect = effect(() => {
@@ -16220,6 +16289,15 @@ class RangeSliderComponent {
16220
16289
  getLabel(label) {
16221
16290
  return typeof label === 'object' && 'label' in label ? label.label : label;
16222
16291
  }
16292
+ getThumbAriaLabel(index) {
16293
+ const currentValue = this.currentValue();
16294
+ if (currentValue.length <= 1) {
16295
+ return undefined;
16296
+ }
16297
+ const ariaLabels = this.ariaLabels();
16298
+ return (ariaLabels?.[index] ??
16299
+ (currentValue.length === 2 ? (index === 0 ? 'Minimum value' : 'Maximum value') : `Value ${index + 1}`));
16300
+ }
16223
16301
  handleMouseMove($event) {
16224
16302
  if (!this.isDragging() || !this.trackRef() || this.disabledState()) {
16225
16303
  return;
@@ -16232,13 +16310,13 @@ class RangeSliderComponent {
16232
16310
  this.isDragging.set(false);
16233
16311
  }
16234
16312
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RangeSliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16235
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RangeSliderComponent, isStandalone: true, selector: "c-range-slider", inputs: { clickableLabels: { classPropertyName: "clickableLabels", publicName: "clickableLabels", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, distance: { classPropertyName: "distance", publicName: "distance", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, tooltips: { classPropertyName: "tooltips", publicName: "tooltips", isSignal: true, isRequired: false, transformFunction: null }, tooltipsFormat: { classPropertyName: "tooltipsFormat", publicName: "tooltipsFormat", isSignal: true, isRequired: false, transformFunction: null }, track: { classPropertyName: "track", publicName: "track", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { properties: { "class": "hostClasses()", "attr.disabled": "disabledState() || null", "attr.aria-disabled": "disabledState() || null", "attr.aria-orientation": "vertical() ? \"vertical\" : \"horizontal\"", "attr.aria-valuemax": "max()", "attr.aria-valuemin": "min()", "attr.aria-valuenow": "valueNow()", "attr.role": "role()" }, classAttribute: "range-slider" }, providers: [
16313
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.7", type: RangeSliderComponent, isStandalone: true, selector: "c-range-slider", inputs: { ariaLabels: { classPropertyName: "ariaLabels", publicName: "ariaLabels", isSignal: true, isRequired: false, transformFunction: null }, clickableLabels: { classPropertyName: "clickableLabels", publicName: "clickableLabels", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, distance: { classPropertyName: "distance", publicName: "distance", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: false, transformFunction: null }, tooltips: { classPropertyName: "tooltips", publicName: "tooltips", isSignal: true, isRequired: false, transformFunction: null }, tooltipsFormat: { classPropertyName: "tooltipsFormat", publicName: "tooltipsFormat", isSignal: true, isRequired: false, transformFunction: null }, track: { classPropertyName: "track", publicName: "track", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, host: { properties: { "class": "hostClasses()", "attr.disabled": "disabledState() || null", "attr.aria-disabled": "disabledState() || null" }, classAttribute: "range-slider" }, providers: [
16236
16314
  {
16237
16315
  provide: NG_VALUE_ACCESSOR,
16238
16316
  useExisting: forwardRef(() => RangeSliderComponent),
16239
16317
  multi: true
16240
16318
  }
16241
- ], viewQueries: [{ propertyName: "inputRefs", predicate: ["inputRef"], descendants: true, isSignal: true }, { propertyName: "trackRef", first: true, predicate: ["trackRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div (mousedown)=\"handleInputsContainerMouseDown($event)\" class=\"range-slider-inputs-container\">\n @for (value of currentValue(); track index; let index = $index) {\n <input\n class=\"range-slider-input\"\n type=\"range\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value\"\n [attr.value]=\"value\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-orientation]=\"vertical() ? 'vertical' : 'horizontal'\"\n [disabled]=\"disabledState()\"\n [ngModel]=\"value\"\n (ngModelChange)=\"handleInputChange($event, index)\"\n [attr.id]=\"inputIds()[index]\"\n role=\"slider\"\n #inputRef\n />\n @if (tooltips()) {\n <div\n class=\"range-slider-tooltip\"\n [style]=\"value | rangeSliderTooltipPositionStyle: min() : max() : vertical() : thumbSize() : isRtl\"\n >\n <div class=\"range-slider-tooltip-inner\">\n @let tooltipsFn = tooltipsFormat();\n <label for=\"{{inputIds()[index]}}\">\n {{ tooltipsFn?.(value) ?? value }}\n </label>\n </div>\n <div class=\"range-slider-tooltip-arrow\"></div>\n </div>\n }\n }\n @if (track()) {\n <div\n class=\"range-slider-track\"\n [style]=\"currentValue() | rangeSliderTrack: min() : max() : vertical() : isRtl\"\n #trackRef\n ></div>\n } @else {\n <div class=\"range-slider-track\" #trackRef></div>\n }\n</div>\n\n@if (labels()) {\n <div class=\"range-slider-labels-container\" #labelsContainerRef>\n @for (label of labels(); track index; let index = $index) {\n @let labelValue = getLabel(label);\n <div\n #labelRef\n [class]=\"label | rangeSliderLabelClass: clickableLabels()\"\n [style]=\"label | rangeSliderLabelStyle: min() : max() : vertical() : labels() : index: isRtl\"\n (mousedown)=\"handleLabelClick($event, label)\"\n >\n {{ labelValue }}\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.RangeValueAccessor, selector: "input[type=range]:not([ngNoCva])[formControlName],input[type=range]:not([ngNoCva])[formControl],input[type=range]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: RangeSliderTrackPipe, name: "rangeSliderTrack" }, { kind: "pipe", type: RangeSliderLabelStylePipe, name: "rangeSliderLabelStyle" }, { kind: "pipe", type: RangeSliderLabelClassPipe, name: "rangeSliderLabelClass" }, { kind: "pipe", type: RangeSliderTooltipPositionStylePipe, name: "rangeSliderTooltipPositionStyle" }] });
16319
+ ], viewQueries: [{ propertyName: "inputRefs", predicate: ["inputRef"], descendants: true, isSignal: true }, { propertyName: "trackRef", first: true, predicate: ["trackRef"], descendants: true, isSignal: true }], ngImport: i0, template: "<div (mousedown)=\"handleInputsContainerMouseDown($event)\" class=\"range-slider-inputs-container\">\n @for (value of currentValue(); track index; let index = $index) {\n <input\n class=\"range-slider-input\"\n type=\"range\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value\"\n [attr.value]=\"value\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-valuetext]=\"tooltipsFormat()?.(value)\"\n [attr.aria-orientation]=\"vertical() ? 'vertical' : 'horizontal'\"\n [attr.aria-label]=\"getThumbAriaLabel(index)\"\n [disabled]=\"disabledState()\"\n [ngModel]=\"value\"\n (ngModelChange)=\"handleInputChange($event, index)\"\n [attr.id]=\"inputIds()[index]\"\n [attr.role]=\"role()\"\n #inputRef\n />\n @if (tooltips()) {\n <div\n class=\"range-slider-tooltip\"\n [style]=\"value | rangeSliderTooltipPositionStyle: min() : max() : vertical() : thumbSize() : isRtl\"\n >\n <div class=\"range-slider-tooltip-inner\">\n @let tooltipsFn = tooltipsFormat();\n <label for=\"{{inputIds()[index]}}\">\n {{ tooltipsFn?.(value) ?? value }}\n </label>\n </div>\n <div class=\"range-slider-tooltip-arrow\"></div>\n </div>\n }\n }\n @if (track()) {\n <div\n class=\"range-slider-track\"\n [style]=\"currentValue() | rangeSliderTrack: min() : max() : vertical() : isRtl\"\n #trackRef\n ></div>\n } @else {\n <div class=\"range-slider-track\" #trackRef></div>\n }\n</div>\n\n@if (labels()) {\n <div class=\"range-slider-labels-container\" #labelsContainerRef>\n @for (label of labels(); track index; let index = $index) {\n @let labelValue = getLabel(label);\n <div\n #labelRef\n [class]=\"label | rangeSliderLabelClass: clickableLabels()\"\n [style]=\"label | rangeSliderLabelStyle: min() : max() : vertical() : labels() : index: isRtl\"\n (mousedown)=\"handleLabelClick($event, label)\"\n >\n {{ labelValue }}\n </div>\n }\n </div>\n}\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.RangeValueAccessor, selector: "input[type=range]:not([ngNoCva])[formControlName],input[type=range]:not([ngNoCva])[formControl],input[type=range]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: RangeSliderTrackPipe, name: "rangeSliderTrack" }, { kind: "pipe", type: RangeSliderLabelStylePipe, name: "rangeSliderLabelStyle" }, { kind: "pipe", type: RangeSliderLabelClassPipe, name: "rangeSliderLabelClass" }, { kind: "pipe", type: RangeSliderTooltipPositionStylePipe, name: "rangeSliderTooltipPositionStyle" }] });
16242
16320
  }
16243
16321
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RangeSliderComponent, decorators: [{
16244
16322
  type: Component,
@@ -16259,14 +16337,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.7", ngImpor
16259
16337
  class: 'range-slider',
16260
16338
  '[class]': 'hostClasses()',
16261
16339
  '[attr.disabled]': 'disabledState() || null',
16262
- '[attr.aria-disabled]': 'disabledState() || null',
16263
- '[attr.aria-orientation]': 'vertical() ? "vertical" : "horizontal"',
16264
- '[attr.aria-valuemax]': 'max()',
16265
- '[attr.aria-valuemin]': 'min()',
16266
- '[attr.aria-valuenow]': 'valueNow()',
16267
- '[attr.role]': 'role()'
16268
- }, template: "<div (mousedown)=\"handleInputsContainerMouseDown($event)\" class=\"range-slider-inputs-container\">\n @for (value of currentValue(); track index; let index = $index) {\n <input\n class=\"range-slider-input\"\n type=\"range\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value\"\n [attr.value]=\"value\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-orientation]=\"vertical() ? 'vertical' : 'horizontal'\"\n [disabled]=\"disabledState()\"\n [ngModel]=\"value\"\n (ngModelChange)=\"handleInputChange($event, index)\"\n [attr.id]=\"inputIds()[index]\"\n role=\"slider\"\n #inputRef\n />\n @if (tooltips()) {\n <div\n class=\"range-slider-tooltip\"\n [style]=\"value | rangeSliderTooltipPositionStyle: min() : max() : vertical() : thumbSize() : isRtl\"\n >\n <div class=\"range-slider-tooltip-inner\">\n @let tooltipsFn = tooltipsFormat();\n <label for=\"{{inputIds()[index]}}\">\n {{ tooltipsFn?.(value) ?? value }}\n </label>\n </div>\n <div class=\"range-slider-tooltip-arrow\"></div>\n </div>\n }\n }\n @if (track()) {\n <div\n class=\"range-slider-track\"\n [style]=\"currentValue() | rangeSliderTrack: min() : max() : vertical() : isRtl\"\n #trackRef\n ></div>\n } @else {\n <div class=\"range-slider-track\" #trackRef></div>\n }\n</div>\n\n@if (labels()) {\n <div class=\"range-slider-labels-container\" #labelsContainerRef>\n @for (label of labels(); track index; let index = $index) {\n @let labelValue = getLabel(label);\n <div\n #labelRef\n [class]=\"label | rangeSliderLabelClass: clickableLabels()\"\n [style]=\"label | rangeSliderLabelStyle: min() : max() : vertical() : labels() : index: isRtl\"\n (mousedown)=\"handleLabelClick($event, label)\"\n >\n {{ labelValue }}\n </div>\n }\n </div>\n}\n" }]
16269
- }], ctorParameters: () => [], propDecorators: { clickableLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickableLabels", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], distance: [{ type: i0.Input, args: [{ isSignal: true, alias: "distance", required: false }] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], tooltips: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltips", required: false }] }], tooltipsFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipsFormat", required: false }] }], track: [{ type: i0.Input, args: [{ isSignal: true, alias: "track", required: false }] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], inputRefs: [{ type: i0.ViewChildren, args: ['inputRef', { isSignal: true }] }], trackRef: [{ type: i0.ViewChild, args: ['trackRef', { isSignal: true }] }] } });
16340
+ '[attr.aria-disabled]': 'disabledState() || null'
16341
+ }, template: "<div (mousedown)=\"handleInputsContainerMouseDown($event)\" class=\"range-slider-inputs-container\">\n @for (value of currentValue(); track index; let index = $index) {\n <input\n class=\"range-slider-input\"\n type=\"range\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value\"\n [attr.value]=\"value\"\n [attr.aria-valuemin]=\"min()\"\n [attr.aria-valuemax]=\"max()\"\n [attr.aria-valuenow]=\"value\"\n [attr.aria-valuetext]=\"tooltipsFormat()?.(value)\"\n [attr.aria-orientation]=\"vertical() ? 'vertical' : 'horizontal'\"\n [attr.aria-label]=\"getThumbAriaLabel(index)\"\n [disabled]=\"disabledState()\"\n [ngModel]=\"value\"\n (ngModelChange)=\"handleInputChange($event, index)\"\n [attr.id]=\"inputIds()[index]\"\n [attr.role]=\"role()\"\n #inputRef\n />\n @if (tooltips()) {\n <div\n class=\"range-slider-tooltip\"\n [style]=\"value | rangeSliderTooltipPositionStyle: min() : max() : vertical() : thumbSize() : isRtl\"\n >\n <div class=\"range-slider-tooltip-inner\">\n @let tooltipsFn = tooltipsFormat();\n <label for=\"{{inputIds()[index]}}\">\n {{ tooltipsFn?.(value) ?? value }}\n </label>\n </div>\n <div class=\"range-slider-tooltip-arrow\"></div>\n </div>\n }\n }\n @if (track()) {\n <div\n class=\"range-slider-track\"\n [style]=\"currentValue() | rangeSliderTrack: min() : max() : vertical() : isRtl\"\n #trackRef\n ></div>\n } @else {\n <div class=\"range-slider-track\" #trackRef></div>\n }\n</div>\n\n@if (labels()) {\n <div class=\"range-slider-labels-container\" #labelsContainerRef>\n @for (label of labels(); track index; let index = $index) {\n @let labelValue = getLabel(label);\n <div\n #labelRef\n [class]=\"label | rangeSliderLabelClass: clickableLabels()\"\n [style]=\"label | rangeSliderLabelStyle: min() : max() : vertical() : labels() : index: isRtl\"\n (mousedown)=\"handleLabelClick($event, label)\"\n >\n {{ labelValue }}\n </div>\n }\n </div>\n}\n" }]
16342
+ }], ctorParameters: () => [], propDecorators: { ariaLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabels", required: false }] }], clickableLabels: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickableLabels", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], distance: [{ type: i0.Input, args: [{ isSignal: true, alias: "distance", required: false }] }], labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: false }] }], tooltips: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltips", required: false }] }], tooltipsFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipsFormat", required: false }] }], track: [{ type: i0.Input, args: [{ isSignal: true, alias: "track", required: false }] }], valueInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], inputRefs: [{ type: i0.ViewChildren, args: ['inputRef', { isSignal: true }] }], trackRef: [{ type: i0.ViewChild, args: ['trackRef', { isSignal: true }] }] } });
16270
16343
 
16271
16344
  class RangeSliderModule {
16272
16345
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.7", ngImport: i0, type: RangeSliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });