@coreui/angular-pro 5.7.13 → 5.7.15
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.
|
@@ -14,8 +14,8 @@ import { DomPortal, CdkPortalOutlet } from '@angular/cdk/portal';
|
|
|
14
14
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
15
15
|
import * as i1$1 from '@angular/router';
|
|
16
16
|
import { RouterModule, Router, ActivatedRoute, NavigationEnd, RouterLink } from '@angular/router';
|
|
17
|
-
import { animation, group, query, animate, style, trigger, state, transition, useAnimation, animateChild } from '@angular/animations';
|
|
18
17
|
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
18
|
+
import { trigger, state, style, transition, animate } from '@angular/animations';
|
|
19
19
|
import { IconDirective } from '@coreui/icons-angular';
|
|
20
20
|
|
|
21
21
|
var BreakpointInfix;
|
|
@@ -2997,7 +2997,11 @@ class MultiSelectComponent {
|
|
|
2997
2997
|
return this.multiSelectOptionsContent.reset(sortedOptions);
|
|
2998
2998
|
});
|
|
2999
2999
|
this.scrollViewportView.changes
|
|
3000
|
-
.pipe(take(1),
|
|
3000
|
+
.pipe(take(1), tap((changes) => {
|
|
3001
|
+
changes.toArray()[0]
|
|
3002
|
+
?.getElementRef()
|
|
3003
|
+
?.nativeElement?.firstElementChild?.classList.add('form-multi-select-options');
|
|
3004
|
+
}), map((changes) => changes.toArray()[0]), tap((scrollViewport) => {
|
|
3001
3005
|
if (!this.scrollViewport) {
|
|
3002
3006
|
this.scrollViewport = scrollViewport;
|
|
3003
3007
|
const cdkVirtualScrollContentWrapper = this.scrollViewport.getElementRef().nativeElement?.firstElementChild;
|
|
@@ -3105,7 +3109,7 @@ class MultiSelectComponent {
|
|
|
3105
3109
|
useExisting: forwardRef(() => MultiSelectComponent),
|
|
3106
3110
|
multi: true
|
|
3107
3111
|
}
|
|
3108
|
-
], 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 ? ' ' : ', ' }}</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 */
|
|
3112
|
+
], 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 ? ' ' : ', ' }}</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 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 .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 */
|
|
3109
3113
|
import('@angular/cdk/scrolling').then(m => m.CdkFixedSizeVirtualScroll), /* @ts-ignore */
|
|
3110
3114
|
import('@angular/cdk/scrolling').then(m => m.CdkVirtualScrollViewport), /* @ts-ignore */
|
|
3111
3115
|
import('@angular/cdk/scrolling').then(m => m.CdkVirtualForOf), NgStyle,
|
|
@@ -3148,7 +3152,7 @@ i0.ɵɵngDeclareClassMetadataAsync({ minVersion: "18.0.0", version: "22.1.0", ng
|
|
|
3148
3152
|
'[attr.aria-expanded]': 'visible()',
|
|
3149
3153
|
'[attr.aria-disabled]': 'disabled()',
|
|
3150
3154
|
'[attr.tabindex]': 'tabIndex'
|
|
3151
|
-
}, 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 ? ' ' : ', ' }}</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
|
|
3155
|
+
}, 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 ? ' ' : ', ' }}</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 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 .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"] }]
|
|
3152
3156
|
}], 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: [{
|
|
3153
3157
|
type: Input
|
|
3154
3158
|
}], 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: [{
|
|
@@ -8233,15 +8237,8 @@ class CarouselService {
|
|
|
8233
8237
|
setIndex(index) {
|
|
8234
8238
|
this.#carouselIndex.next(index);
|
|
8235
8239
|
}
|
|
8236
|
-
|
|
8237
|
-
|
|
8238
|
-
}
|
|
8239
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselService, decorators: [{
|
|
8240
|
-
type: Injectable
|
|
8241
|
-
}] });
|
|
8242
|
-
|
|
8243
|
-
class CarouselState {
|
|
8244
|
-
#carouselService = inject(CarouselService);
|
|
8240
|
+
animating = signal(false, /* @ts-ignore */
|
|
8241
|
+
...(ngDevMode ? [{ debugName: "animating" }] : /* istanbul ignore next */ []));
|
|
8245
8242
|
#state = {
|
|
8246
8243
|
activeItemIndex: -1,
|
|
8247
8244
|
animate: true,
|
|
@@ -8260,7 +8257,7 @@ class CarouselState {
|
|
|
8260
8257
|
if (prevState.activeItemIndex !== nextState.activeItemIndex) {
|
|
8261
8258
|
const activeItemIndex = this.state.activeItemIndex || 0;
|
|
8262
8259
|
const itemInterval = (this.state.items && this.state.items[activeItemIndex]?.interval()) || -1;
|
|
8263
|
-
this
|
|
8260
|
+
this.setIndex({
|
|
8264
8261
|
active: nextState.activeItemIndex,
|
|
8265
8262
|
interval: itemInterval,
|
|
8266
8263
|
lastItemIndex: (nextState.items?.length ?? 0) - 1
|
|
@@ -8282,7 +8279,7 @@ class CarouselState {
|
|
|
8282
8279
|
}
|
|
8283
8280
|
}
|
|
8284
8281
|
setNextIndex(nextIndex) {
|
|
8285
|
-
this
|
|
8282
|
+
this.setIndex(nextIndex);
|
|
8286
8283
|
}
|
|
8287
8284
|
direction(direction = 'next') {
|
|
8288
8285
|
this.state = { direction };
|
|
@@ -8311,10 +8308,10 @@ class CarouselState {
|
|
|
8311
8308
|
interval: 0
|
|
8312
8309
|
};
|
|
8313
8310
|
}
|
|
8314
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type:
|
|
8315
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type:
|
|
8311
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
8312
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselService });
|
|
8316
8313
|
}
|
|
8317
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type:
|
|
8314
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselService, decorators: [{
|
|
8318
8315
|
type: Injectable
|
|
8319
8316
|
}] });
|
|
8320
8317
|
|
|
@@ -8323,9 +8320,9 @@ class CarouselConfig {
|
|
|
8323
8320
|
activeIndex = 0;
|
|
8324
8321
|
/* Animate transition of slides */
|
|
8325
8322
|
animate = true;
|
|
8326
|
-
/* Default direction of auto
|
|
8323
|
+
/* Default direction of auto-changing of slides */
|
|
8327
8324
|
direction = 'next';
|
|
8328
|
-
/* Default interval of auto
|
|
8325
|
+
/* Default interval of auto-changing of slides */
|
|
8329
8326
|
interval;
|
|
8330
8327
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
8331
8328
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselConfig, providedIn: 'root' });
|
|
@@ -8339,7 +8336,6 @@ class CarouselComponent {
|
|
|
8339
8336
|
config = inject(CarouselConfig);
|
|
8340
8337
|
#hostElement = inject(ElementRef);
|
|
8341
8338
|
#carouselService = inject(CarouselService);
|
|
8342
|
-
#carouselState = inject(CarouselState);
|
|
8343
8339
|
#intersectionService = inject(IntersectionService);
|
|
8344
8340
|
#listenersService = inject(ListenersService);
|
|
8345
8341
|
constructor() {
|
|
@@ -8347,7 +8343,7 @@ class CarouselComponent {
|
|
|
8347
8343
|
}
|
|
8348
8344
|
loadConfig() {
|
|
8349
8345
|
this.activeIndex.update((activeIndex) => this.config?.activeIndex ?? activeIndex);
|
|
8350
|
-
this.animate.update((animate) => this.config?.animate ?? animate);
|
|
8346
|
+
this.animate.update((animate) => (animate === false ? animate : (this.config?.animate ?? animate)));
|
|
8351
8347
|
this.direction.update((direction) => this.config?.direction ?? direction);
|
|
8352
8348
|
this.interval.update((interval) => this.config?.interval ?? interval);
|
|
8353
8349
|
}
|
|
@@ -8363,8 +8359,8 @@ class CarouselComponent {
|
|
|
8363
8359
|
* @return boolean
|
|
8364
8360
|
*/
|
|
8365
8361
|
animateInput = input(true, { ...(ngDevMode ? { debugName: "animateInput" } : /* istanbul ignore next */ {}), alias: 'animate' });
|
|
8366
|
-
animate = linkedSignal(
|
|
8367
|
-
|
|
8362
|
+
animate = linkedSignal(this.animateInput, /* @ts-ignore */
|
|
8363
|
+
...(ngDevMode ? [{ debugName: "animate" }] : /* istanbul ignore next */ []));
|
|
8368
8364
|
/**
|
|
8369
8365
|
* Carousel direction. [docs]
|
|
8370
8366
|
* @return {'next' | 'prev'}
|
|
@@ -8382,7 +8378,7 @@ class CarouselComponent {
|
|
|
8382
8378
|
computation: (value) => value });
|
|
8383
8379
|
#intervalEffect = effect(() => {
|
|
8384
8380
|
const interval = this.interval();
|
|
8385
|
-
this.#
|
|
8381
|
+
this.#carouselService.state = { interval: interval };
|
|
8386
8382
|
interval ? this.setTimer() : this.resetTimer();
|
|
8387
8383
|
}, /* @ts-ignore */
|
|
8388
8384
|
...(ngDevMode ? [{ debugName: "#intervalEffect" }] : /* istanbul ignore next */ []));
|
|
@@ -8400,7 +8396,7 @@ class CarouselComponent {
|
|
|
8400
8396
|
touch = input(true, /* @ts-ignore */
|
|
8401
8397
|
...(ngDevMode ? [{ debugName: "touch" }] : /* istanbul ignore next */ []));
|
|
8402
8398
|
/**
|
|
8403
|
-
* Set type of the transition.
|
|
8399
|
+
* Set the type of the transition.
|
|
8404
8400
|
* @return {'slide' | 'crossfade'}
|
|
8405
8401
|
* @default 'slide'
|
|
8406
8402
|
*/
|
|
@@ -8423,16 +8419,18 @@ class CarouselComponent {
|
|
|
8423
8419
|
swipeSubscription;
|
|
8424
8420
|
#destroyRef = inject(DestroyRef);
|
|
8425
8421
|
ngOnInit() {
|
|
8426
|
-
this.
|
|
8422
|
+
this.carouselServiceSubscribe();
|
|
8427
8423
|
}
|
|
8428
8424
|
ngOnDestroy() {
|
|
8429
8425
|
this.resetTimer();
|
|
8430
8426
|
this.clearListeners();
|
|
8431
8427
|
this.swipeSubscribe(false);
|
|
8428
|
+
// Ensure IntersectionObserver is cleaned up
|
|
8429
|
+
this.#intersectionService?.unobserve(this.#hostElement);
|
|
8432
8430
|
}
|
|
8433
8431
|
ngAfterContentInit() {
|
|
8434
8432
|
this.intersectionServiceSubscribe();
|
|
8435
|
-
this.#
|
|
8433
|
+
this.#carouselService.state = {
|
|
8436
8434
|
activeItemIndex: this.activeIndex(),
|
|
8437
8435
|
animate: this.animate(),
|
|
8438
8436
|
interval: this.interval(),
|
|
@@ -8470,8 +8468,8 @@ class CarouselComponent {
|
|
|
8470
8468
|
this.resetTimer();
|
|
8471
8469
|
if (interval > 0) {
|
|
8472
8470
|
this.timerId = setTimeout(() => {
|
|
8473
|
-
const nextIndex = this.#
|
|
8474
|
-
this.#
|
|
8471
|
+
const nextIndex = this.#carouselService.direction(direction);
|
|
8472
|
+
this.#carouselService.state = { activeItemIndex: nextIndex };
|
|
8475
8473
|
}, interval);
|
|
8476
8474
|
}
|
|
8477
8475
|
}
|
|
@@ -8479,7 +8477,7 @@ class CarouselComponent {
|
|
|
8479
8477
|
clearTimeout(this.timerId);
|
|
8480
8478
|
this.timerId = undefined;
|
|
8481
8479
|
}
|
|
8482
|
-
|
|
8480
|
+
carouselServiceSubscribe() {
|
|
8483
8481
|
this.#carouselService.carouselIndex$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((nextItem) => {
|
|
8484
8482
|
if ('active' in nextItem && typeof nextItem.active === 'number') {
|
|
8485
8483
|
this.itemChange?.emit(nextItem.active);
|
|
@@ -8496,7 +8494,7 @@ class CarouselComponent {
|
|
|
8496
8494
|
this.#intersectionService.createIntersectionObserver(this.#hostElement);
|
|
8497
8495
|
this.#intersectionService.intersecting$
|
|
8498
8496
|
.pipe(filter((next) => next.hostElement === this.#hostElement), finalize(() => {
|
|
8499
|
-
this.#intersectionService
|
|
8497
|
+
this.#intersectionService?.unobserve(this.#hostElement);
|
|
8500
8498
|
}), takeUntilDestroyed(this.#destroyRef))
|
|
8501
8499
|
.subscribe((next) => {
|
|
8502
8500
|
this.visible = next.isIntersecting;
|
|
@@ -8514,10 +8512,13 @@ class CarouselComponent {
|
|
|
8514
8512
|
.subscribe(([touchstart, [touchend, touchmove]]) => {
|
|
8515
8513
|
touchstart.stopPropagation();
|
|
8516
8514
|
touchmove.stopPropagation();
|
|
8515
|
+
if (this.#carouselService.animating()) {
|
|
8516
|
+
return;
|
|
8517
|
+
}
|
|
8517
8518
|
const distanceX = touchstart.touches[0]?.clientX - touchmove.touches[0]?.clientX || 0;
|
|
8518
8519
|
if (Math.abs(distanceX) > 0.3 * carouselElement.clientWidth && touchstart.timeStamp <= touchmove.timeStamp) {
|
|
8519
|
-
const nextIndex = this.#
|
|
8520
|
-
this.#
|
|
8520
|
+
const nextIndex = this.#carouselService.direction(distanceX > 0 ? 'next' : 'prev');
|
|
8521
|
+
this.#carouselService.state = { activeItemIndex: nextIndex };
|
|
8521
8522
|
}
|
|
8522
8523
|
});
|
|
8523
8524
|
}
|
|
@@ -8526,11 +8527,11 @@ class CarouselComponent {
|
|
|
8526
8527
|
}
|
|
8527
8528
|
}
|
|
8528
8529
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8529
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: CarouselComponent, isStandalone: true, selector: "c-carousel", inputs: { activeIndexInput: { classPropertyName: "activeIndexInput", publicName: "activeIndex", isSignal: true, isRequired: false, transformFunction: null }, animateInput: { classPropertyName: "animateInput", publicName: "animate", isSignal: true, isRequired: false, transformFunction: null }, directionInput: { classPropertyName: "directionInput", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, intervalInput: { classPropertyName: "intervalInput", publicName: "interval", isSignal: true, isRequired: false, transformFunction: null }, pause: { classPropertyName: "pause", publicName: "pause", isSignal: true, isRequired: false, transformFunction: null }, touch: { classPropertyName: "touch", publicName: "touch", isSignal: true, isRequired: false, transformFunction: null }, transition: { classPropertyName: "transition", publicName: "transition", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemChange: "itemChange" }, host: { properties: { "class.carousel-fade": "transition() === \"crossfade\" && animate()" }, classAttribute: "carousel slide" }, providers: [CarouselService,
|
|
8530
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: CarouselComponent, isStandalone: true, selector: "c-carousel", inputs: { activeIndexInput: { classPropertyName: "activeIndexInput", publicName: "activeIndex", isSignal: true, isRequired: false, transformFunction: null }, animateInput: { classPropertyName: "animateInput", publicName: "animate", isSignal: true, isRequired: false, transformFunction: null }, directionInput: { classPropertyName: "directionInput", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, intervalInput: { classPropertyName: "intervalInput", publicName: "interval", isSignal: true, isRequired: false, transformFunction: null }, pause: { classPropertyName: "pause", publicName: "pause", isSignal: true, isRequired: false, transformFunction: null }, touch: { classPropertyName: "touch", publicName: "touch", isSignal: true, isRequired: false, transformFunction: null }, transition: { classPropertyName: "transition", publicName: "transition", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemChange: "itemChange" }, host: { properties: { "class.carousel-fade": "transition() === \"crossfade\" && animate()" }, classAttribute: "carousel slide" }, providers: [CarouselService, ListenersService], exportAs: ["cCarousel"], hostDirectives: [{ directive: ThemeDirective, inputs: ["dark", "dark"] }], ngImport: i0, template: '<ng-content />', isInline: true, styles: [":host{display:block}\n"] });
|
|
8530
8531
|
}
|
|
8531
8532
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
8532
8533
|
type: Component,
|
|
8533
|
-
args: [{ selector: 'c-carousel', template: '<ng-content />', providers: [CarouselService,
|
|
8534
|
+
args: [{ selector: 'c-carousel', template: '<ng-content />', providers: [CarouselService, ListenersService], hostDirectives: [{ directive: ThemeDirective, inputs: ['dark'] }], exportAs: 'cCarousel', host: {
|
|
8534
8535
|
class: 'carousel slide',
|
|
8535
8536
|
'[class.carousel-fade]': 'transition() === "crossfade" && animate()'
|
|
8536
8537
|
}, styles: [":host{display:block}\n"] }]
|
|
@@ -8548,7 +8549,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
|
|
|
8548
8549
|
}] });
|
|
8549
8550
|
|
|
8550
8551
|
class CarouselControlComponent {
|
|
8551
|
-
#
|
|
8552
|
+
#carouselService = inject(CarouselService);
|
|
8552
8553
|
/**
|
|
8553
8554
|
* Carousel control caption. [docs]
|
|
8554
8555
|
* @return string
|
|
@@ -8590,11 +8591,14 @@ class CarouselControlComponent {
|
|
|
8590
8591
|
}
|
|
8591
8592
|
}
|
|
8592
8593
|
onClick($event) {
|
|
8594
|
+
if (this.#carouselService.animating()) {
|
|
8595
|
+
return;
|
|
8596
|
+
}
|
|
8593
8597
|
this.#play();
|
|
8594
8598
|
}
|
|
8595
8599
|
#play(direction = this.direction()) {
|
|
8596
|
-
const nextIndex = this.#
|
|
8597
|
-
this.#
|
|
8600
|
+
const nextIndex = this.#carouselService.direction(direction);
|
|
8601
|
+
this.#carouselService.state = { activeItemIndex: nextIndex };
|
|
8598
8602
|
}
|
|
8599
8603
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8600
8604
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: CarouselControlComponent, isStandalone: true, selector: "c-carousel-control", inputs: { captionInput: { classPropertyName: "captionInput", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keyup": "onKeyUp($event)", "click": "onClick($event)" }, properties: { "attr.role": "role()", "class": "hostClasses()" } }, exportAs: ["cCarouselControl"], ngImport: i0, template: "<ng-content>\n <span [attr.aria-hidden]=\"true\" [class]=\"carouselControlIconClass()\"></span>\n <span class=\"visually-hidden\">{{ caption() }}</span>\n</ng-content>\n" });
|
|
@@ -8612,7 +8616,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
|
|
|
8612
8616
|
class CarouselIndicatorsComponent {
|
|
8613
8617
|
#destroyRef = inject(DestroyRef);
|
|
8614
8618
|
#carouselService = inject(CarouselService);
|
|
8615
|
-
#carouselState = inject(CarouselState);
|
|
8616
8619
|
items = [];
|
|
8617
8620
|
active = signal(0, /* @ts-ignore */
|
|
8618
8621
|
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
@@ -8626,16 +8629,19 @@ class CarouselIndicatorsComponent {
|
|
|
8626
8629
|
...(ngDevMode ? [{ debugName: "templates" }] : /* istanbul ignore next */ []));
|
|
8627
8630
|
ngOnInit() {
|
|
8628
8631
|
this.#carouselService.carouselIndex$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((nextIndex) => {
|
|
8629
|
-
this.items = this.#
|
|
8632
|
+
this.items = this.#carouselService?.state?.items?.map((item) => item.index) ?? [];
|
|
8630
8633
|
if ('active' in nextIndex) {
|
|
8631
8634
|
this.active.set(nextIndex.active ?? 0);
|
|
8632
8635
|
}
|
|
8633
8636
|
});
|
|
8634
8637
|
}
|
|
8635
8638
|
onClick(index) {
|
|
8639
|
+
if (this.#carouselService.animating()) {
|
|
8640
|
+
return;
|
|
8641
|
+
}
|
|
8636
8642
|
if (index !== this.active()) {
|
|
8637
8643
|
const direction = index < this.active() ? 'prev' : 'next';
|
|
8638
|
-
this.#
|
|
8644
|
+
this.#carouselService.state = { direction, activeItemIndex: index };
|
|
8639
8645
|
}
|
|
8640
8646
|
}
|
|
8641
8647
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselIndicatorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -8647,19 +8653,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
|
|
|
8647
8653
|
}], propDecorators: { contentTemplates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TemplateIdDirective), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
8648
8654
|
|
|
8649
8655
|
class CarouselItemComponent {
|
|
8656
|
+
#elementRef = inject((ElementRef));
|
|
8650
8657
|
#destroyRef = inject(DestroyRef);
|
|
8651
8658
|
#carouselService = inject(CarouselService);
|
|
8659
|
+
#timeoutId;
|
|
8660
|
+
#rafId;
|
|
8652
8661
|
index;
|
|
8653
8662
|
/**
|
|
8654
8663
|
* @ignore
|
|
8655
8664
|
*/
|
|
8656
8665
|
activeInput = input(false, { ...(ngDevMode ? { debugName: "activeInput" } : /* istanbul ignore next */ {}), transform: booleanAttribute, alias: 'active' });
|
|
8657
|
-
active = linkedSignal(
|
|
8658
|
-
|
|
8659
|
-
return value;
|
|
8660
|
-
} });
|
|
8666
|
+
active = linkedSignal(this.activeInput, /* @ts-ignore */
|
|
8667
|
+
...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
8661
8668
|
/**
|
|
8662
|
-
* Time delay before cycling to next item. If -1, uses carousel interval value.
|
|
8669
|
+
* Time delay before cycling to the next item. If -1, uses carousel interval value.
|
|
8663
8670
|
* @return number
|
|
8664
8671
|
* @default -1
|
|
8665
8672
|
*/
|
|
@@ -8673,102 +8680,119 @@ class CarouselItemComponent {
|
|
|
8673
8680
|
role = input('group', /* @ts-ignore */
|
|
8674
8681
|
...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
|
|
8675
8682
|
constructor() {
|
|
8683
|
+
this.#elementRef.nativeElement.style.transition = '1ms';
|
|
8684
|
+
}
|
|
8685
|
+
ngOnInit() {
|
|
8686
|
+
console.log('OnInit', this.#carouselService.state.animate);
|
|
8676
8687
|
this.#carouselService.carouselIndex$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((nextIndex) => {
|
|
8677
8688
|
if ('active' in nextIndex) {
|
|
8689
|
+
console.log('#carouselService', this.#carouselService.state.animate, this.#elementRef.nativeElement.style.transition);
|
|
8690
|
+
if (this.#carouselService.state.animate && this.#elementRef.nativeElement.style.transition !== '') {
|
|
8691
|
+
this.#timeoutId = setTimeout(() => {
|
|
8692
|
+
this.#elementRef.nativeElement.style.transition = '';
|
|
8693
|
+
this.#timeoutId = undefined;
|
|
8694
|
+
}, 500);
|
|
8695
|
+
}
|
|
8696
|
+
this.prevActive.set(this.active());
|
|
8678
8697
|
this.active.set(nextIndex.active === this.index);
|
|
8679
8698
|
}
|
|
8680
8699
|
});
|
|
8700
|
+
// Clean up timeout on destroy
|
|
8701
|
+
this.#destroyRef.onDestroy(() => {
|
|
8702
|
+
if (this.#timeoutId !== undefined) {
|
|
8703
|
+
clearTimeout(this.#timeoutId);
|
|
8704
|
+
}
|
|
8705
|
+
if (this.#rafId !== undefined) {
|
|
8706
|
+
cancelAnimationFrame(this.#rafId);
|
|
8707
|
+
}
|
|
8708
|
+
});
|
|
8681
8709
|
}
|
|
8710
|
+
hostClasses = computed(() => {
|
|
8711
|
+
const order = this.orderClassName();
|
|
8712
|
+
const direction = this.directionClassName();
|
|
8713
|
+
return {
|
|
8714
|
+
active: this.activeClass(),
|
|
8715
|
+
[`${order}`]: !!order,
|
|
8716
|
+
[`${direction}`]: !!direction,
|
|
8717
|
+
'd-none': !this.activeClass() && !order && !direction
|
|
8718
|
+
};
|
|
8719
|
+
}, /* @ts-ignore */
|
|
8720
|
+
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
8721
|
+
prevActive = signal(false, /* @ts-ignore */
|
|
8722
|
+
...(ngDevMode ? [{ debugName: "prevActive" }] : /* istanbul ignore next */ []));
|
|
8723
|
+
activeClass = signal(false, /* @ts-ignore */
|
|
8724
|
+
...(ngDevMode ? [{ debugName: "activeClass" }] : /* istanbul ignore next */ []));
|
|
8725
|
+
orderClassName = signal('', /* @ts-ignore */
|
|
8726
|
+
...(ngDevMode ? [{ debugName: "orderClassName" }] : /* istanbul ignore next */ []));
|
|
8727
|
+
directionClassName = signal('', /* @ts-ignore */
|
|
8728
|
+
...(ngDevMode ? [{ debugName: "directionClassName" }] : /* istanbul ignore next */ []));
|
|
8729
|
+
#activeEffect = effect((OnCleanup) => {
|
|
8730
|
+
const active = this.active();
|
|
8731
|
+
const prevActive = untracked(this.prevActive);
|
|
8732
|
+
const direction = this.#carouselService.state?.direction;
|
|
8733
|
+
this.activeClass.set(prevActive);
|
|
8734
|
+
if (active) {
|
|
8735
|
+
this.orderClassName.set(`carousel-item-${direction}`);
|
|
8736
|
+
}
|
|
8737
|
+
if (prevActive || active) {
|
|
8738
|
+
if (this.#rafId) {
|
|
8739
|
+
cancelAnimationFrame(this.#rafId);
|
|
8740
|
+
}
|
|
8741
|
+
this.#rafId = requestAnimationFrame(() => {
|
|
8742
|
+
// reflow is necessary to proper transition
|
|
8743
|
+
void this.#elementRef.nativeElement.offsetHeight;
|
|
8744
|
+
this.directionClassName.set(`carousel-item-${direction === 'next' ? 'start' : 'end'}`);
|
|
8745
|
+
this.#rafId = undefined;
|
|
8746
|
+
});
|
|
8747
|
+
}
|
|
8748
|
+
const handleTransitionStart = () => {
|
|
8749
|
+
if (active) {
|
|
8750
|
+
this.#carouselService.animating.set(true);
|
|
8751
|
+
}
|
|
8752
|
+
};
|
|
8753
|
+
const handleTransitionEnd = () => {
|
|
8754
|
+
if (active) {
|
|
8755
|
+
this.#carouselService.animating.set(false);
|
|
8756
|
+
}
|
|
8757
|
+
this.directionClassName.set('');
|
|
8758
|
+
this.orderClassName.set('');
|
|
8759
|
+
this.activeClass.set(active);
|
|
8760
|
+
};
|
|
8761
|
+
this.#elementRef.nativeElement.addEventListener('transitionstart', handleTransitionStart);
|
|
8762
|
+
this.#elementRef.nativeElement.addEventListener('transitionend', handleTransitionEnd);
|
|
8763
|
+
OnCleanup(() => {
|
|
8764
|
+
this.#elementRef.nativeElement.removeEventListener('transitionstart', handleTransitionStart);
|
|
8765
|
+
this.#elementRef.nativeElement.removeEventListener('transitionend', handleTransitionEnd);
|
|
8766
|
+
});
|
|
8767
|
+
}, /* @ts-ignore */
|
|
8768
|
+
...(ngDevMode ? [{ debugName: "#activeEffect" }] : /* istanbul ignore next */ []));
|
|
8682
8769
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8683
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
|
8770
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: CarouselItemComponent, isStandalone: true, selector: "c-carousel-item", inputs: { activeInput: { classPropertyName: "activeInput", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, interval: { classPropertyName: "interval", publicName: "interval", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()", "attr.role": "role()" }, classAttribute: "carousel-item" }, exportAs: ["cCarouselItem"], ngImport: i0, template: `
|
|
8771
|
+
<!-- @if (this.activeClass() || (this.orderClassName() && this.directionClassName())) {-->
|
|
8772
|
+
<ng-content />
|
|
8773
|
+
<!-- }-->
|
|
8774
|
+
`, isInline: true });
|
|
8684
8775
|
}
|
|
8685
8776
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselItemComponent, decorators: [{
|
|
8686
8777
|
type: Component,
|
|
8687
|
-
args: [{
|
|
8778
|
+
args: [{
|
|
8779
|
+
selector: 'c-carousel-item',
|
|
8780
|
+
template: `
|
|
8781
|
+
<!-- @if (this.activeClass() || (this.orderClassName() && this.directionClassName())) {-->
|
|
8782
|
+
<ng-content />
|
|
8783
|
+
<!-- }-->
|
|
8784
|
+
`,
|
|
8785
|
+
exportAs: 'cCarouselItem',
|
|
8786
|
+
host: {
|
|
8688
8787
|
class: 'carousel-item',
|
|
8689
|
-
'[class
|
|
8788
|
+
'[class]': 'hostClasses()',
|
|
8690
8789
|
'[attr.role]': 'role()'
|
|
8691
|
-
}
|
|
8790
|
+
}
|
|
8791
|
+
}]
|
|
8692
8792
|
}], ctorParameters: () => [], propDecorators: { activeInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], interval: [{ type: i0.Input, args: [{ isSignal: true, alias: "interval", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }] } });
|
|
8693
8793
|
|
|
8694
|
-
function toSlideLeft(fromState, toState) {
|
|
8695
|
-
return toState.left === true && toState.type === 'slide';
|
|
8696
|
-
}
|
|
8697
|
-
function toSlideRight(fromState, toState) {
|
|
8698
|
-
return toState.left === false && toState.type === 'slide';
|
|
8699
|
-
}
|
|
8700
|
-
function toFadeLeft(fromState, toState) {
|
|
8701
|
-
return toState.left === true && toState.type !== 'slide';
|
|
8702
|
-
}
|
|
8703
|
-
function toFadeRight(fromState, toState) {
|
|
8704
|
-
return toState.left === false && toState.type !== 'slide';
|
|
8705
|
-
}
|
|
8706
|
-
const slideAnimationLeft = animation(group([
|
|
8707
|
-
query(':leave', [
|
|
8708
|
-
animate('0.6s ease-in-out', style({
|
|
8709
|
-
transform: 'translateX(-100%)'
|
|
8710
|
-
}))
|
|
8711
|
-
], { optional: true }),
|
|
8712
|
-
query(':enter', [
|
|
8713
|
-
style({
|
|
8714
|
-
transform: 'translateX(100%)'
|
|
8715
|
-
}),
|
|
8716
|
-
animate('0.6s ease-in-out', style('*'))
|
|
8717
|
-
], { optional: true })
|
|
8718
|
-
]));
|
|
8719
|
-
const slideAnimationRight = animation(group([
|
|
8720
|
-
query(':enter', [
|
|
8721
|
-
style({
|
|
8722
|
-
transform: 'translateX(-100%)'
|
|
8723
|
-
}),
|
|
8724
|
-
animate('0.6s ease-in-out', style('*'))
|
|
8725
|
-
], { optional: true }),
|
|
8726
|
-
query(':leave', [
|
|
8727
|
-
animate('0.6s ease-in-out', style({
|
|
8728
|
-
transform: 'translateX(100%)'
|
|
8729
|
-
}))
|
|
8730
|
-
], { optional: true })
|
|
8731
|
-
]));
|
|
8732
|
-
const fadeAnimationLeft = animation(group([
|
|
8733
|
-
query(':leave', [
|
|
8734
|
-
animate('0.9s ease-in-out', style({
|
|
8735
|
-
zIndex: 0,
|
|
8736
|
-
opacity: 0
|
|
8737
|
-
}))
|
|
8738
|
-
], { optional: true }),
|
|
8739
|
-
query(':enter', [
|
|
8740
|
-
style({
|
|
8741
|
-
zIndex: 1,
|
|
8742
|
-
opacity: 1
|
|
8743
|
-
}),
|
|
8744
|
-
animate('0.6s ease-in-out', style('*'))
|
|
8745
|
-
], { optional: true })
|
|
8746
|
-
]));
|
|
8747
|
-
const fadeAnimationRight = animation(group([
|
|
8748
|
-
query(':enter', [
|
|
8749
|
-
style({
|
|
8750
|
-
zIndex: 1,
|
|
8751
|
-
opacity: 1
|
|
8752
|
-
}),
|
|
8753
|
-
animate('0.6s ease-in-out', style('*'))
|
|
8754
|
-
], { optional: true }),
|
|
8755
|
-
query(':leave', [
|
|
8756
|
-
animate('0.9s ease-in-out', style({
|
|
8757
|
-
zIndex: 0,
|
|
8758
|
-
opacity: 0
|
|
8759
|
-
}))
|
|
8760
|
-
], { optional: true })
|
|
8761
|
-
]));
|
|
8762
|
-
const carouselPlay = trigger('carouselPlay', [
|
|
8763
|
-
state('*', style({ transform: 'translateX(0)', display: 'block', opacity: 1 })),
|
|
8764
|
-
transition(toFadeLeft, useAnimation(fadeAnimationLeft)),
|
|
8765
|
-
transition(toFadeRight, useAnimation(fadeAnimationRight)),
|
|
8766
|
-
transition(toSlideLeft, useAnimation(slideAnimationLeft)),
|
|
8767
|
-
transition(toSlideRight, useAnimation(slideAnimationRight))
|
|
8768
|
-
]);
|
|
8769
|
-
|
|
8770
8794
|
class CarouselInnerComponent {
|
|
8771
|
-
#
|
|
8795
|
+
#carouselService = inject(CarouselService);
|
|
8772
8796
|
activeIndex = signal(undefined, /* @ts-ignore */
|
|
8773
8797
|
...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
|
|
8774
8798
|
animate = signal(true, /* @ts-ignore */
|
|
@@ -8796,7 +8820,7 @@ class CarouselInnerComponent {
|
|
|
8796
8820
|
}
|
|
8797
8821
|
ngAfterContentChecked() {
|
|
8798
8822
|
this.setItems();
|
|
8799
|
-
const state = this.#
|
|
8823
|
+
const state = this.#carouselService?.state;
|
|
8800
8824
|
const nextIndex = state?.activeItemIndex;
|
|
8801
8825
|
const nextDirection = state?.direction;
|
|
8802
8826
|
if (this.activeIndex() !== nextIndex) {
|
|
@@ -8811,18 +8835,16 @@ class CarouselInnerComponent {
|
|
|
8811
8835
|
const contentItems = this.contentItems();
|
|
8812
8836
|
if (this.#prevContentItems() !== contentItems) {
|
|
8813
8837
|
this.#prevContentItems.set([...contentItems]);
|
|
8814
|
-
this.#
|
|
8838
|
+
this.#carouselService.setItems(contentItems);
|
|
8815
8839
|
}
|
|
8816
8840
|
}
|
|
8817
8841
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselInnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8818
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.0", type: CarouselInnerComponent, isStandalone: true, selector: "c-carousel-inner", host: { properties: { "
|
|
8842
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.0", type: CarouselInnerComponent, isStandalone: true, selector: "c-carousel-inner", host: { properties: { "attr.aria-live": "ariaLive()" }, classAttribute: "carousel-inner" }, queries: [{ propertyName: "contentItems", predicate: CarouselItemComponent, isSignal: true }], ngImport: i0, template: '<ng-content />', isInline: true, styles: [":host{display:block}\n"] });
|
|
8819
8843
|
}
|
|
8820
8844
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselInnerComponent, decorators: [{
|
|
8821
8845
|
type: Component,
|
|
8822
|
-
args: [{ selector: 'c-carousel-inner',
|
|
8846
|
+
args: [{ selector: 'c-carousel-inner', template: '<ng-content />', host: {
|
|
8823
8847
|
class: 'carousel-inner',
|
|
8824
|
-
'[@carouselPlay]': 'slideType()',
|
|
8825
|
-
'[@.disabled]': '!animate()',
|
|
8826
8848
|
'[attr.aria-live]': 'ariaLive()'
|
|
8827
8849
|
}, styles: [":host{display:block}\n"] }]
|
|
8828
8850
|
}], propDecorators: { contentItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => CarouselItemComponent), { isSignal: true }] }] } });
|
|
@@ -8843,7 +8865,7 @@ class CarouselModule {
|
|
|
8843
8865
|
CarouselIndicatorsComponent,
|
|
8844
8866
|
CarouselInnerComponent,
|
|
8845
8867
|
CarouselItemComponent] });
|
|
8846
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselModule, providers: [CarouselService,
|
|
8868
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselModule, providers: [CarouselService, CarouselConfig] });
|
|
8847
8869
|
}
|
|
8848
8870
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselModule, decorators: [{
|
|
8849
8871
|
type: NgModule,
|
|
@@ -8856,7 +8878,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
|
|
|
8856
8878
|
CarouselInnerComponent,
|
|
8857
8879
|
CarouselItemComponent
|
|
8858
8880
|
],
|
|
8859
|
-
providers: [CarouselService,
|
|
8881
|
+
providers: [CarouselService, CarouselConfig],
|
|
8860
8882
|
exports: [
|
|
8861
8883
|
CarouselComponent,
|
|
8862
8884
|
CarouselCaptionComponent,
|
|
@@ -20213,85 +20235,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
|
|
|
20213
20235
|
}]
|
|
20214
20236
|
}] });
|
|
20215
20237
|
|
|
20238
|
+
const getTransitionDurationFromElement = (element) => {
|
|
20239
|
+
if (!element) {
|
|
20240
|
+
return 0;
|
|
20241
|
+
}
|
|
20242
|
+
// Get transition-duration of the element
|
|
20243
|
+
let { transitionDuration, transitionDelay } = window.getComputedStyle(element);
|
|
20244
|
+
const floatTransitionDuration = Number.parseFloat(transitionDuration);
|
|
20245
|
+
const floatTransitionDelay = Number.parseFloat(transitionDelay);
|
|
20246
|
+
// Return 0 if element or transition duration is not found
|
|
20247
|
+
if (!floatTransitionDuration && !floatTransitionDelay) {
|
|
20248
|
+
return 0;
|
|
20249
|
+
}
|
|
20250
|
+
// If multiple durations are defined, take the first
|
|
20251
|
+
transitionDuration = transitionDuration.split(',')[0];
|
|
20252
|
+
transitionDelay = transitionDelay.split(',')[0];
|
|
20253
|
+
return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * 1000;
|
|
20254
|
+
};
|
|
20255
|
+
|
|
20216
20256
|
class TabPanelComponent {
|
|
20217
|
-
tabsService = inject(TabsService);
|
|
20257
|
+
#tabsService = inject(TabsService);
|
|
20258
|
+
#elementRef = inject(ElementRef);
|
|
20218
20259
|
/**
|
|
20219
20260
|
* aria-labelledby attribute
|
|
20220
|
-
* @
|
|
20261
|
+
* @return string
|
|
20221
20262
|
* @default undefined
|
|
20222
20263
|
*/
|
|
20223
20264
|
ariaLabelledBy = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabelledBy" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
|
|
20224
20265
|
/**
|
|
20225
20266
|
* Element id attribute
|
|
20226
|
-
* @
|
|
20267
|
+
* @return string
|
|
20227
20268
|
* @default undefined
|
|
20228
20269
|
*/
|
|
20229
20270
|
id = input(/* @ts-ignore */
|
|
20230
20271
|
...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
|
|
20231
20272
|
/**
|
|
20232
20273
|
* Item key.
|
|
20233
|
-
* @
|
|
20274
|
+
* @return string | number
|
|
20234
20275
|
* @required
|
|
20235
20276
|
*/
|
|
20236
20277
|
itemKey = input.required(/* @ts-ignore */
|
|
20237
20278
|
...(ngDevMode ? [{ debugName: "itemKey" }] : /* istanbul ignore next */ []));
|
|
20238
20279
|
/**
|
|
20239
20280
|
* Element role.
|
|
20240
|
-
* @
|
|
20281
|
+
* @return string
|
|
20241
20282
|
* @default 'tabpanel'
|
|
20242
20283
|
*/
|
|
20243
20284
|
role = input('tabpanel', /* @ts-ignore */
|
|
20244
20285
|
...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
|
|
20245
20286
|
/**
|
|
20246
20287
|
* tabindex attribute.
|
|
20247
|
-
* @
|
|
20288
|
+
* @return number
|
|
20248
20289
|
* @default 0
|
|
20249
20290
|
*/
|
|
20250
20291
|
tabindex = input(0, { ...(ngDevMode ? { debugName: "tabindex" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
20251
20292
|
/**
|
|
20252
20293
|
* Enable fade in transition.
|
|
20253
|
-
* @
|
|
20294
|
+
* @return boolean
|
|
20254
20295
|
* @default true
|
|
20255
20296
|
*/
|
|
20256
20297
|
transition = input(true, /* @ts-ignore */
|
|
20257
20298
|
...(ngDevMode ? [{ debugName: "transition" }] : /* istanbul ignore next */ []));
|
|
20258
20299
|
/**
|
|
20259
20300
|
* visible change output
|
|
20260
|
-
* @
|
|
20301
|
+
* @return VisibleChangeEvent
|
|
20261
20302
|
*/
|
|
20262
20303
|
visibleChange = output();
|
|
20263
20304
|
show = signal(false, /* @ts-ignore */
|
|
20264
20305
|
...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
|
|
20265
20306
|
visible = computed(() => {
|
|
20266
|
-
const visible = this
|
|
20307
|
+
const visible = this.#tabsService.activeItemKey() === this.itemKey() && !this.#tabsService.activeItem()?.disabled;
|
|
20267
20308
|
this.visibleChange?.emit({ itemKey: this.itemKey(), visible });
|
|
20268
20309
|
return visible;
|
|
20269
20310
|
}, /* @ts-ignore */
|
|
20270
20311
|
...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
|
|
20271
|
-
|
|
20312
|
+
#transitionDuration = 0;
|
|
20313
|
+
#visibleEffect = effect(() => {
|
|
20314
|
+
const isVisible = this.visible();
|
|
20315
|
+
const hasTransition = this.transition();
|
|
20316
|
+
if (!hasTransition) {
|
|
20317
|
+
this.show.set(isVisible);
|
|
20318
|
+
}
|
|
20319
|
+
else {
|
|
20320
|
+
requestAnimationFrame(() => {
|
|
20321
|
+
if (this.#transitionDuration === 0) {
|
|
20322
|
+
this.#transitionDuration = getTransitionDurationFromElement(this.#elementRef.nativeElement);
|
|
20323
|
+
}
|
|
20324
|
+
setTimeout(() => this.show.set(isVisible), this.#transitionDuration || 0);
|
|
20325
|
+
});
|
|
20326
|
+
}
|
|
20327
|
+
}, /* @ts-ignore */
|
|
20328
|
+
...(ngDevMode ? [{ debugName: "#visibleEffect" }] : /* istanbul ignore next */ []));
|
|
20329
|
+
propId = computed(() => this.id() ?? `${this.#tabsService.id()}-panel-${this.itemKey()}`, /* @ts-ignore */
|
|
20272
20330
|
...(ngDevMode ? [{ debugName: "propId" }] : /* istanbul ignore next */ []));
|
|
20273
|
-
attrAriaLabelledBy = computed(() => this.ariaLabelledBy() ?? `${this
|
|
20331
|
+
attrAriaLabelledBy = computed(() => this.ariaLabelledBy() ?? `${this.#tabsService.id()}-tab-${this.itemKey()}`, /* @ts-ignore */
|
|
20274
20332
|
...(ngDevMode ? [{ debugName: "attrAriaLabelledBy" }] : /* istanbul ignore next */ []));
|
|
20275
20333
|
hostClasses = computed(() => ({
|
|
20276
20334
|
'tab-pane': true,
|
|
20277
|
-
active: this.
|
|
20335
|
+
active: this.visible(),
|
|
20278
20336
|
fade: this.transition(),
|
|
20279
20337
|
show: this.show(),
|
|
20280
|
-
invisible: this
|
|
20338
|
+
invisible: this.#tabsService.activeItem()?.disabled
|
|
20281
20339
|
}), /* @ts-ignore */
|
|
20282
20340
|
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
20283
|
-
|
|
20284
|
-
|
|
20341
|
+
onTransitionEnd($event) {
|
|
20342
|
+
if ($event.propertyName === 'opacity' && $event.target === this.#elementRef.nativeElement) {
|
|
20343
|
+
this.show.set(this.visible());
|
|
20344
|
+
}
|
|
20285
20345
|
}
|
|
20286
20346
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: TabPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
20287
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: TabPanelComponent, isStandalone: true, selector: "c-tab-panel", inputs: { ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, itemKey: { classPropertyName: "itemKey", publicName: "itemKey", isSignal: true, isRequired: true, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null }, transition: { classPropertyName: "transition", publicName: "transition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, host: { listeners: { "
|
|
20288
|
-
trigger('fadeInOut', [
|
|
20289
|
-
state('show', style({ opacity: 1 })),
|
|
20290
|
-
state('hide', style({ opacity: 0 })),
|
|
20291
|
-
state('void', style({ opacity: 1 })),
|
|
20292
|
-
transition('* => *', [query('@*', [animateChild()], { optional: true }), animate('150ms linear')])
|
|
20293
|
-
])
|
|
20294
|
-
] });
|
|
20347
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.0", type: TabPanelComponent, isStandalone: true, selector: "c-tab-panel", inputs: { ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, itemKey: { classPropertyName: "itemKey", publicName: "itemKey", isSignal: true, isRequired: true, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, tabindex: { classPropertyName: "tabindex", publicName: "tabindex", isSignal: true, isRequired: false, transformFunction: null }, transition: { classPropertyName: "transition", publicName: "transition", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, host: { listeners: { "transitionend": "onTransitionEnd($event)" }, properties: { "class": "hostClasses()", "tabindex": "visible() ? tabindex() : -1", "attr.aria-labelledby": "attrAriaLabelledBy()", "id": "propId()", "attr.role": "role()" } }, exportAs: ["cTabPanel"], ngImport: i0, template: '<ng-content />', isInline: true });
|
|
20295
20348
|
}
|
|
20296
20349
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: TabPanelComponent, decorators: [{
|
|
20297
20350
|
type: Component,
|
|
@@ -20305,18 +20358,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
|
|
|
20305
20358
|
'[attr.aria-labelledby]': 'attrAriaLabelledBy()',
|
|
20306
20359
|
'[id]': 'propId()',
|
|
20307
20360
|
'[attr.role]': 'role()',
|
|
20308
|
-
'
|
|
20309
|
-
|
|
20310
|
-
'(@fadeInOut.done)': 'onAnimationDone($event)'
|
|
20311
|
-
},
|
|
20312
|
-
animations: [
|
|
20313
|
-
trigger('fadeInOut', [
|
|
20314
|
-
state('show', style({ opacity: 1 })),
|
|
20315
|
-
state('hide', style({ opacity: 0 })),
|
|
20316
|
-
state('void', style({ opacity: 1 })),
|
|
20317
|
-
transition('* => *', [query('@*', [animateChild()], { optional: true }), animate('150ms linear')])
|
|
20318
|
-
])
|
|
20319
|
-
]
|
|
20361
|
+
'(transitionend)': 'onTransitionEnd($event)'
|
|
20362
|
+
}
|
|
20320
20363
|
}]
|
|
20321
20364
|
}], propDecorators: { ariaLabelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], itemKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemKey", required: true }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], tabindex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabindex", required: false }] }], transition: [{ type: i0.Input, args: [{ isSignal: true, alias: "transition", required: false }] }], visibleChange: [{ type: i0.Output, args: ["visibleChange"] }] } });
|
|
20322
20365
|
|