@coreui/angular-pro 5.7.13 → 5.7.14

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;
@@ -8233,15 +8233,8 @@ class CarouselService {
8233
8233
  setIndex(index) {
8234
8234
  this.#carouselIndex.next(index);
8235
8235
  }
8236
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
8237
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselService });
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);
8236
+ animating = signal(false, /* @ts-ignore */
8237
+ ...(ngDevMode ? [{ debugName: "animating" }] : /* istanbul ignore next */ []));
8245
8238
  #state = {
8246
8239
  activeItemIndex: -1,
8247
8240
  animate: true,
@@ -8260,7 +8253,7 @@ class CarouselState {
8260
8253
  if (prevState.activeItemIndex !== nextState.activeItemIndex) {
8261
8254
  const activeItemIndex = this.state.activeItemIndex || 0;
8262
8255
  const itemInterval = (this.state.items && this.state.items[activeItemIndex]?.interval()) || -1;
8263
- this.#carouselService.setIndex({
8256
+ this.setIndex({
8264
8257
  active: nextState.activeItemIndex,
8265
8258
  interval: itemInterval,
8266
8259
  lastItemIndex: (nextState.items?.length ?? 0) - 1
@@ -8282,7 +8275,7 @@ class CarouselState {
8282
8275
  }
8283
8276
  }
8284
8277
  setNextIndex(nextIndex) {
8285
- this.#carouselService.setIndex(nextIndex);
8278
+ this.setIndex(nextIndex);
8286
8279
  }
8287
8280
  direction(direction = 'next') {
8288
8281
  this.state = { direction };
@@ -8311,10 +8304,10 @@ class CarouselState {
8311
8304
  interval: 0
8312
8305
  };
8313
8306
  }
8314
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselState, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
8315
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselState });
8307
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
8308
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselService });
8316
8309
  }
8317
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselState, decorators: [{
8310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselService, decorators: [{
8318
8311
  type: Injectable
8319
8312
  }] });
8320
8313
 
@@ -8323,9 +8316,9 @@ class CarouselConfig {
8323
8316
  activeIndex = 0;
8324
8317
  /* Animate transition of slides */
8325
8318
  animate = true;
8326
- /* Default direction of auto changing of slides */
8319
+ /* Default direction of auto-changing of slides */
8327
8320
  direction = 'next';
8328
- /* Default interval of auto changing of slides */
8321
+ /* Default interval of auto-changing of slides */
8329
8322
  interval;
8330
8323
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
8331
8324
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselConfig, providedIn: 'root' });
@@ -8339,7 +8332,6 @@ class CarouselComponent {
8339
8332
  config = inject(CarouselConfig);
8340
8333
  #hostElement = inject(ElementRef);
8341
8334
  #carouselService = inject(CarouselService);
8342
- #carouselState = inject(CarouselState);
8343
8335
  #intersectionService = inject(IntersectionService);
8344
8336
  #listenersService = inject(ListenersService);
8345
8337
  constructor() {
@@ -8347,7 +8339,7 @@ class CarouselComponent {
8347
8339
  }
8348
8340
  loadConfig() {
8349
8341
  this.activeIndex.update((activeIndex) => this.config?.activeIndex ?? activeIndex);
8350
- this.animate.update((animate) => this.config?.animate ?? animate);
8342
+ this.animate.update((animate) => (animate === false ? animate : (this.config?.animate ?? animate)));
8351
8343
  this.direction.update((direction) => this.config?.direction ?? direction);
8352
8344
  this.interval.update((interval) => this.config?.interval ?? interval);
8353
8345
  }
@@ -8363,8 +8355,8 @@ class CarouselComponent {
8363
8355
  * @return boolean
8364
8356
  */
8365
8357
  animateInput = input(true, { ...(ngDevMode ? { debugName: "animateInput" } : /* istanbul ignore next */ {}), alias: 'animate' });
8366
- animate = linkedSignal({ ...(ngDevMode ? { debugName: "animate" } : /* istanbul ignore next */ {}), source: this.animateInput,
8367
- computation: (value) => value });
8358
+ animate = linkedSignal(this.animateInput, /* @ts-ignore */
8359
+ ...(ngDevMode ? [{ debugName: "animate" }] : /* istanbul ignore next */ []));
8368
8360
  /**
8369
8361
  * Carousel direction. [docs]
8370
8362
  * @return {'next' | 'prev'}
@@ -8382,7 +8374,7 @@ class CarouselComponent {
8382
8374
  computation: (value) => value });
8383
8375
  #intervalEffect = effect(() => {
8384
8376
  const interval = this.interval();
8385
- this.#carouselState.state = { interval: interval };
8377
+ this.#carouselService.state = { interval: interval };
8386
8378
  interval ? this.setTimer() : this.resetTimer();
8387
8379
  }, /* @ts-ignore */
8388
8380
  ...(ngDevMode ? [{ debugName: "#intervalEffect" }] : /* istanbul ignore next */ []));
@@ -8400,7 +8392,7 @@ class CarouselComponent {
8400
8392
  touch = input(true, /* @ts-ignore */
8401
8393
  ...(ngDevMode ? [{ debugName: "touch" }] : /* istanbul ignore next */ []));
8402
8394
  /**
8403
- * Set type of the transition.
8395
+ * Set the type of the transition.
8404
8396
  * @return {'slide' | 'crossfade'}
8405
8397
  * @default 'slide'
8406
8398
  */
@@ -8423,16 +8415,18 @@ class CarouselComponent {
8423
8415
  swipeSubscription;
8424
8416
  #destroyRef = inject(DestroyRef);
8425
8417
  ngOnInit() {
8426
- this.carouselStateSubscribe();
8418
+ this.carouselServiceSubscribe();
8427
8419
  }
8428
8420
  ngOnDestroy() {
8429
8421
  this.resetTimer();
8430
8422
  this.clearListeners();
8431
8423
  this.swipeSubscribe(false);
8424
+ // Ensure IntersectionObserver is cleaned up
8425
+ this.#intersectionService?.unobserve(this.#hostElement);
8432
8426
  }
8433
8427
  ngAfterContentInit() {
8434
8428
  this.intersectionServiceSubscribe();
8435
- this.#carouselState.state = {
8429
+ this.#carouselService.state = {
8436
8430
  activeItemIndex: this.activeIndex(),
8437
8431
  animate: this.animate(),
8438
8432
  interval: this.interval(),
@@ -8470,8 +8464,8 @@ class CarouselComponent {
8470
8464
  this.resetTimer();
8471
8465
  if (interval > 0) {
8472
8466
  this.timerId = setTimeout(() => {
8473
- const nextIndex = this.#carouselState.direction(direction);
8474
- this.#carouselState.state = { activeItemIndex: nextIndex };
8467
+ const nextIndex = this.#carouselService.direction(direction);
8468
+ this.#carouselService.state = { activeItemIndex: nextIndex };
8475
8469
  }, interval);
8476
8470
  }
8477
8471
  }
@@ -8479,7 +8473,7 @@ class CarouselComponent {
8479
8473
  clearTimeout(this.timerId);
8480
8474
  this.timerId = undefined;
8481
8475
  }
8482
- carouselStateSubscribe() {
8476
+ carouselServiceSubscribe() {
8483
8477
  this.#carouselService.carouselIndex$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((nextItem) => {
8484
8478
  if ('active' in nextItem && typeof nextItem.active === 'number') {
8485
8479
  this.itemChange?.emit(nextItem.active);
@@ -8496,7 +8490,7 @@ class CarouselComponent {
8496
8490
  this.#intersectionService.createIntersectionObserver(this.#hostElement);
8497
8491
  this.#intersectionService.intersecting$
8498
8492
  .pipe(filter((next) => next.hostElement === this.#hostElement), finalize(() => {
8499
- this.#intersectionService.unobserve(this.#hostElement);
8493
+ this.#intersectionService?.unobserve(this.#hostElement);
8500
8494
  }), takeUntilDestroyed(this.#destroyRef))
8501
8495
  .subscribe((next) => {
8502
8496
  this.visible = next.isIntersecting;
@@ -8514,10 +8508,13 @@ class CarouselComponent {
8514
8508
  .subscribe(([touchstart, [touchend, touchmove]]) => {
8515
8509
  touchstart.stopPropagation();
8516
8510
  touchmove.stopPropagation();
8511
+ if (this.#carouselService.animating()) {
8512
+ return;
8513
+ }
8517
8514
  const distanceX = touchstart.touches[0]?.clientX - touchmove.touches[0]?.clientX || 0;
8518
8515
  if (Math.abs(distanceX) > 0.3 * carouselElement.clientWidth && touchstart.timeStamp <= touchmove.timeStamp) {
8519
- const nextIndex = this.#carouselState.direction(distanceX > 0 ? 'next' : 'prev');
8520
- this.#carouselState.state = { activeItemIndex: nextIndex };
8516
+ const nextIndex = this.#carouselService.direction(distanceX > 0 ? 'next' : 'prev');
8517
+ this.#carouselService.state = { activeItemIndex: nextIndex };
8521
8518
  }
8522
8519
  });
8523
8520
  }
@@ -8526,11 +8523,11 @@ class CarouselComponent {
8526
8523
  }
8527
8524
  }
8528
8525
  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, CarouselState, ListenersService], exportAs: ["cCarousel"], hostDirectives: [{ directive: ThemeDirective, inputs: ["dark", "dark"] }], ngImport: i0, template: '<ng-content />', isInline: true, styles: [":host{display:block}\n"] });
8526
+ 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
8527
  }
8531
8528
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselComponent, decorators: [{
8532
8529
  type: Component,
8533
- args: [{ selector: 'c-carousel', template: '<ng-content />', providers: [CarouselService, CarouselState, ListenersService], hostDirectives: [{ directive: ThemeDirective, inputs: ['dark'] }], exportAs: 'cCarousel', host: {
8530
+ args: [{ selector: 'c-carousel', template: '<ng-content />', providers: [CarouselService, ListenersService], hostDirectives: [{ directive: ThemeDirective, inputs: ['dark'] }], exportAs: 'cCarousel', host: {
8534
8531
  class: 'carousel slide',
8535
8532
  '[class.carousel-fade]': 'transition() === "crossfade" && animate()'
8536
8533
  }, styles: [":host{display:block}\n"] }]
@@ -8548,7 +8545,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
8548
8545
  }] });
8549
8546
 
8550
8547
  class CarouselControlComponent {
8551
- #carouselState = inject(CarouselState);
8548
+ #carouselService = inject(CarouselService);
8552
8549
  /**
8553
8550
  * Carousel control caption. [docs]
8554
8551
  * @return string
@@ -8590,11 +8587,14 @@ class CarouselControlComponent {
8590
8587
  }
8591
8588
  }
8592
8589
  onClick($event) {
8590
+ if (this.#carouselService.animating()) {
8591
+ return;
8592
+ }
8593
8593
  this.#play();
8594
8594
  }
8595
8595
  #play(direction = this.direction()) {
8596
- const nextIndex = this.#carouselState.direction(direction);
8597
- this.#carouselState.state = { activeItemIndex: nextIndex };
8596
+ const nextIndex = this.#carouselService.direction(direction);
8597
+ this.#carouselService.state = { activeItemIndex: nextIndex };
8598
8598
  }
8599
8599
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8600
8600
  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 +8612,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
8612
8612
  class CarouselIndicatorsComponent {
8613
8613
  #destroyRef = inject(DestroyRef);
8614
8614
  #carouselService = inject(CarouselService);
8615
- #carouselState = inject(CarouselState);
8616
8615
  items = [];
8617
8616
  active = signal(0, /* @ts-ignore */
8618
8617
  ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
@@ -8626,16 +8625,19 @@ class CarouselIndicatorsComponent {
8626
8625
  ...(ngDevMode ? [{ debugName: "templates" }] : /* istanbul ignore next */ []));
8627
8626
  ngOnInit() {
8628
8627
  this.#carouselService.carouselIndex$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((nextIndex) => {
8629
- this.items = this.#carouselState?.state?.items?.map((item) => item.index) ?? [];
8628
+ this.items = this.#carouselService?.state?.items?.map((item) => item.index) ?? [];
8630
8629
  if ('active' in nextIndex) {
8631
8630
  this.active.set(nextIndex.active ?? 0);
8632
8631
  }
8633
8632
  });
8634
8633
  }
8635
8634
  onClick(index) {
8635
+ if (this.#carouselService.animating()) {
8636
+ return;
8637
+ }
8636
8638
  if (index !== this.active()) {
8637
8639
  const direction = index < this.active() ? 'prev' : 'next';
8638
- this.#carouselState.state = { direction, activeItemIndex: index };
8640
+ this.#carouselService.state = { direction, activeItemIndex: index };
8639
8641
  }
8640
8642
  }
8641
8643
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselIndicatorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -8647,19 +8649,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
8647
8649
  }], propDecorators: { contentTemplates: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TemplateIdDirective), { ...{ descendants: true }, isSignal: true }] }] } });
8648
8650
 
8649
8651
  class CarouselItemComponent {
8652
+ #elementRef = inject((ElementRef));
8650
8653
  #destroyRef = inject(DestroyRef);
8651
8654
  #carouselService = inject(CarouselService);
8655
+ #timeoutId;
8656
+ #rafId;
8652
8657
  index;
8653
8658
  /**
8654
8659
  * @ignore
8655
8660
  */
8656
8661
  activeInput = input(false, { ...(ngDevMode ? { debugName: "activeInput" } : /* istanbul ignore next */ {}), transform: booleanAttribute, alias: 'active' });
8657
- active = linkedSignal({ ...(ngDevMode ? { debugName: "active" } : /* istanbul ignore next */ {}), source: this.activeInput,
8658
- computation: (value) => {
8659
- return value;
8660
- } });
8662
+ active = linkedSignal(this.activeInput, /* @ts-ignore */
8663
+ ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
8661
8664
  /**
8662
- * Time delay before cycling to next item. If -1, uses carousel interval value.
8665
+ * Time delay before cycling to the next item. If -1, uses carousel interval value.
8663
8666
  * @return number
8664
8667
  * @default -1
8665
8668
  */
@@ -8673,102 +8676,119 @@ class CarouselItemComponent {
8673
8676
  role = input('group', /* @ts-ignore */
8674
8677
  ...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
8675
8678
  constructor() {
8679
+ this.#elementRef.nativeElement.style.transition = '1ms';
8680
+ }
8681
+ ngOnInit() {
8682
+ console.log('OnInit', this.#carouselService.state.animate);
8676
8683
  this.#carouselService.carouselIndex$.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((nextIndex) => {
8677
8684
  if ('active' in nextIndex) {
8685
+ console.log('#carouselService', this.#carouselService.state.animate, this.#elementRef.nativeElement.style.transition);
8686
+ if (this.#carouselService.state.animate && this.#elementRef.nativeElement.style.transition !== '') {
8687
+ this.#timeoutId = setTimeout(() => {
8688
+ this.#elementRef.nativeElement.style.transition = '';
8689
+ this.#timeoutId = undefined;
8690
+ }, 500);
8691
+ }
8692
+ this.prevActive.set(this.active());
8678
8693
  this.active.set(nextIndex.active === this.index);
8679
8694
  }
8680
8695
  });
8696
+ // Clean up timeout on destroy
8697
+ this.#destroyRef.onDestroy(() => {
8698
+ if (this.#timeoutId !== undefined) {
8699
+ clearTimeout(this.#timeoutId);
8700
+ }
8701
+ if (this.#rafId !== undefined) {
8702
+ cancelAnimationFrame(this.#rafId);
8703
+ }
8704
+ });
8681
8705
  }
8706
+ hostClasses = computed(() => {
8707
+ const order = this.orderClassName();
8708
+ const direction = this.directionClassName();
8709
+ return {
8710
+ active: this.activeClass(),
8711
+ [`${order}`]: !!order,
8712
+ [`${direction}`]: !!direction,
8713
+ 'd-none': !this.activeClass() && !order && !direction
8714
+ };
8715
+ }, /* @ts-ignore */
8716
+ ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
8717
+ prevActive = signal(false, /* @ts-ignore */
8718
+ ...(ngDevMode ? [{ debugName: "prevActive" }] : /* istanbul ignore next */ []));
8719
+ activeClass = signal(false, /* @ts-ignore */
8720
+ ...(ngDevMode ? [{ debugName: "activeClass" }] : /* istanbul ignore next */ []));
8721
+ orderClassName = signal('', /* @ts-ignore */
8722
+ ...(ngDevMode ? [{ debugName: "orderClassName" }] : /* istanbul ignore next */ []));
8723
+ directionClassName = signal('', /* @ts-ignore */
8724
+ ...(ngDevMode ? [{ debugName: "directionClassName" }] : /* istanbul ignore next */ []));
8725
+ #activeEffect = effect((OnCleanup) => {
8726
+ const active = this.active();
8727
+ const prevActive = untracked(this.prevActive);
8728
+ const direction = this.#carouselService.state?.direction;
8729
+ this.activeClass.set(prevActive);
8730
+ if (active) {
8731
+ this.orderClassName.set(`carousel-item-${direction}`);
8732
+ }
8733
+ if (prevActive || active) {
8734
+ if (this.#rafId) {
8735
+ cancelAnimationFrame(this.#rafId);
8736
+ }
8737
+ this.#rafId = requestAnimationFrame(() => {
8738
+ // reflow is necessary to proper transition
8739
+ void this.#elementRef.nativeElement.offsetHeight;
8740
+ this.directionClassName.set(`carousel-item-${direction === 'next' ? 'start' : 'end'}`);
8741
+ this.#rafId = undefined;
8742
+ });
8743
+ }
8744
+ const handleTransitionStart = () => {
8745
+ if (active) {
8746
+ this.#carouselService.animating.set(true);
8747
+ }
8748
+ };
8749
+ const handleTransitionEnd = () => {
8750
+ if (active) {
8751
+ this.#carouselService.animating.set(false);
8752
+ }
8753
+ this.directionClassName.set('');
8754
+ this.orderClassName.set('');
8755
+ this.activeClass.set(active);
8756
+ };
8757
+ this.#elementRef.nativeElement.addEventListener('transitionstart', handleTransitionStart);
8758
+ this.#elementRef.nativeElement.addEventListener('transitionend', handleTransitionEnd);
8759
+ OnCleanup(() => {
8760
+ this.#elementRef.nativeElement.removeEventListener('transitionstart', handleTransitionStart);
8761
+ this.#elementRef.nativeElement.removeEventListener('transitionend', handleTransitionEnd);
8762
+ });
8763
+ }, /* @ts-ignore */
8764
+ ...(ngDevMode ? [{ debugName: "#activeEffect" }] : /* istanbul ignore next */ []));
8682
8765
  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.0.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.active": "active()", "attr.role": "role()" }, classAttribute: "carousel-item" }, exportAs: ["cCarouselItem"], ngImport: i0, template: "@if (active()) {\n <ng-content />\n}\n", styles: [":host{display:block}\n"] });
8766
+ 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: `
8767
+ <!-- @if (this.activeClass() || (this.orderClassName() && this.directionClassName())) {-->
8768
+ <ng-content />
8769
+ <!-- }-->
8770
+ `, isInline: true });
8684
8771
  }
8685
8772
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselItemComponent, decorators: [{
8686
8773
  type: Component,
8687
- args: [{ selector: 'c-carousel-item', exportAs: 'cCarouselItem', host: {
8774
+ args: [{
8775
+ selector: 'c-carousel-item',
8776
+ template: `
8777
+ <!-- @if (this.activeClass() || (this.orderClassName() && this.directionClassName())) {-->
8778
+ <ng-content />
8779
+ <!-- }-->
8780
+ `,
8781
+ exportAs: 'cCarouselItem',
8782
+ host: {
8688
8783
  class: 'carousel-item',
8689
- '[class.active]': 'active()',
8784
+ '[class]': 'hostClasses()',
8690
8785
  '[attr.role]': 'role()'
8691
- }, template: "@if (active()) {\n <ng-content />\n}\n", styles: [":host{display:block}\n"] }]
8786
+ }
8787
+ }]
8692
8788
  }], 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
8789
 
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
8790
  class CarouselInnerComponent {
8771
- #carouselState = inject(CarouselState);
8791
+ #carouselService = inject(CarouselService);
8772
8792
  activeIndex = signal(undefined, /* @ts-ignore */
8773
8793
  ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
8774
8794
  animate = signal(true, /* @ts-ignore */
@@ -8796,7 +8816,7 @@ class CarouselInnerComponent {
8796
8816
  }
8797
8817
  ngAfterContentChecked() {
8798
8818
  this.setItems();
8799
- const state = this.#carouselState?.state;
8819
+ const state = this.#carouselService?.state;
8800
8820
  const nextIndex = state?.activeItemIndex;
8801
8821
  const nextDirection = state?.direction;
8802
8822
  if (this.activeIndex() !== nextIndex) {
@@ -8811,18 +8831,16 @@ class CarouselInnerComponent {
8811
8831
  const contentItems = this.contentItems();
8812
8832
  if (this.#prevContentItems() !== contentItems) {
8813
8833
  this.#prevContentItems.set([...contentItems]);
8814
- this.#carouselState.setItems(contentItems);
8834
+ this.#carouselService.setItems(contentItems);
8815
8835
  }
8816
8836
  }
8817
8837
  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: { "@carouselPlay": "slideType()", "@.disabled": "!animate()", "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"], animations: [carouselPlay] });
8838
+ 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
8839
  }
8820
8840
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselInnerComponent, decorators: [{
8821
8841
  type: Component,
8822
- args: [{ selector: 'c-carousel-inner', animations: [carouselPlay], template: '<ng-content />', host: {
8842
+ args: [{ selector: 'c-carousel-inner', template: '<ng-content />', host: {
8823
8843
  class: 'carousel-inner',
8824
- '[@carouselPlay]': 'slideType()',
8825
- '[@.disabled]': '!animate()',
8826
8844
  '[attr.aria-live]': 'ariaLive()'
8827
8845
  }, styles: [":host{display:block}\n"] }]
8828
8846
  }], propDecorators: { contentItems: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => CarouselItemComponent), { isSignal: true }] }] } });
@@ -8843,7 +8861,7 @@ class CarouselModule {
8843
8861
  CarouselIndicatorsComponent,
8844
8862
  CarouselInnerComponent,
8845
8863
  CarouselItemComponent] });
8846
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselModule, providers: [CarouselService, CarouselState, CarouselConfig] });
8864
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselModule, providers: [CarouselService, CarouselConfig] });
8847
8865
  }
8848
8866
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: CarouselModule, decorators: [{
8849
8867
  type: NgModule,
@@ -8856,7 +8874,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
8856
8874
  CarouselInnerComponent,
8857
8875
  CarouselItemComponent
8858
8876
  ],
8859
- providers: [CarouselService, CarouselState, CarouselConfig],
8877
+ providers: [CarouselService, CarouselConfig],
8860
8878
  exports: [
8861
8879
  CarouselComponent,
8862
8880
  CarouselCaptionComponent,
@@ -20213,85 +20231,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
20213
20231
  }]
20214
20232
  }] });
20215
20233
 
20234
+ const getTransitionDurationFromElement = (element) => {
20235
+ if (!element) {
20236
+ return 0;
20237
+ }
20238
+ // Get transition-duration of the element
20239
+ let { transitionDuration, transitionDelay } = window.getComputedStyle(element);
20240
+ const floatTransitionDuration = Number.parseFloat(transitionDuration);
20241
+ const floatTransitionDelay = Number.parseFloat(transitionDelay);
20242
+ // Return 0 if element or transition duration is not found
20243
+ if (!floatTransitionDuration && !floatTransitionDelay) {
20244
+ return 0;
20245
+ }
20246
+ // If multiple durations are defined, take the first
20247
+ transitionDuration = transitionDuration.split(',')[0];
20248
+ transitionDelay = transitionDelay.split(',')[0];
20249
+ return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * 1000;
20250
+ };
20251
+
20216
20252
  class TabPanelComponent {
20217
- tabsService = inject(TabsService);
20253
+ #tabsService = inject(TabsService);
20254
+ #elementRef = inject(ElementRef);
20218
20255
  /**
20219
20256
  * aria-labelledby attribute
20220
- * @type string
20257
+ * @return string
20221
20258
  * @default undefined
20222
20259
  */
20223
20260
  ariaLabelledBy = input(undefined, { ...(ngDevMode ? { debugName: "ariaLabelledBy" } : /* istanbul ignore next */ {}), alias: 'aria-labelledby' });
20224
20261
  /**
20225
20262
  * Element id attribute
20226
- * @type string
20263
+ * @return string
20227
20264
  * @default undefined
20228
20265
  */
20229
20266
  id = input(/* @ts-ignore */
20230
20267
  ...(ngDevMode ? [undefined, { debugName: "id" }] : /* istanbul ignore next */ []));
20231
20268
  /**
20232
20269
  * Item key.
20233
- * @type string | number
20270
+ * @return string | number
20234
20271
  * @required
20235
20272
  */
20236
20273
  itemKey = input.required(/* @ts-ignore */
20237
20274
  ...(ngDevMode ? [{ debugName: "itemKey" }] : /* istanbul ignore next */ []));
20238
20275
  /**
20239
20276
  * Element role.
20240
- * @type string
20277
+ * @return string
20241
20278
  * @default 'tabpanel'
20242
20279
  */
20243
20280
  role = input('tabpanel', /* @ts-ignore */
20244
20281
  ...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
20245
20282
  /**
20246
20283
  * tabindex attribute.
20247
- * @type number
20284
+ * @return number
20248
20285
  * @default 0
20249
20286
  */
20250
20287
  tabindex = input(0, { ...(ngDevMode ? { debugName: "tabindex" } : /* istanbul ignore next */ {}), transform: numberAttribute });
20251
20288
  /**
20252
20289
  * Enable fade in transition.
20253
- * @type boolean
20290
+ * @return boolean
20254
20291
  * @default true
20255
20292
  */
20256
20293
  transition = input(true, /* @ts-ignore */
20257
20294
  ...(ngDevMode ? [{ debugName: "transition" }] : /* istanbul ignore next */ []));
20258
20295
  /**
20259
20296
  * visible change output
20260
- * @type OutputEmitterRef<VisibleChangeEvent>
20297
+ * @return VisibleChangeEvent
20261
20298
  */
20262
20299
  visibleChange = output();
20263
20300
  show = signal(false, /* @ts-ignore */
20264
20301
  ...(ngDevMode ? [{ debugName: "show" }] : /* istanbul ignore next */ []));
20265
20302
  visible = computed(() => {
20266
- const visible = this.tabsService.activeItemKey() === this.itemKey() && !this.tabsService.activeItem()?.disabled;
20303
+ const visible = this.#tabsService.activeItemKey() === this.itemKey() && !this.#tabsService.activeItem()?.disabled;
20267
20304
  this.visibleChange?.emit({ itemKey: this.itemKey(), visible });
20268
20305
  return visible;
20269
20306
  }, /* @ts-ignore */
20270
20307
  ...(ngDevMode ? [{ debugName: "visible" }] : /* istanbul ignore next */ []));
20271
- propId = computed(() => this.id() ?? `${this.tabsService.id()}-panel-${this.itemKey()}`, /* @ts-ignore */
20308
+ #transitionDuration = 0;
20309
+ #visibleEffect = effect(() => {
20310
+ const isVisible = this.visible();
20311
+ const hasTransition = this.transition();
20312
+ if (!hasTransition) {
20313
+ this.show.set(isVisible);
20314
+ }
20315
+ else {
20316
+ requestAnimationFrame(() => {
20317
+ if (this.#transitionDuration === 0) {
20318
+ this.#transitionDuration = getTransitionDurationFromElement(this.#elementRef.nativeElement);
20319
+ }
20320
+ setTimeout(() => this.show.set(isVisible), this.#transitionDuration || 0);
20321
+ });
20322
+ }
20323
+ }, /* @ts-ignore */
20324
+ ...(ngDevMode ? [{ debugName: "#visibleEffect" }] : /* istanbul ignore next */ []));
20325
+ propId = computed(() => this.id() ?? `${this.#tabsService.id()}-panel-${this.itemKey()}`, /* @ts-ignore */
20272
20326
  ...(ngDevMode ? [{ debugName: "propId" }] : /* istanbul ignore next */ []));
20273
- attrAriaLabelledBy = computed(() => this.ariaLabelledBy() ?? `${this.tabsService.id()}-tab-${this.itemKey()}`, /* @ts-ignore */
20327
+ attrAriaLabelledBy = computed(() => this.ariaLabelledBy() ?? `${this.#tabsService.id()}-tab-${this.itemKey()}`, /* @ts-ignore */
20274
20328
  ...(ngDevMode ? [{ debugName: "attrAriaLabelledBy" }] : /* istanbul ignore next */ []));
20275
20329
  hostClasses = computed(() => ({
20276
20330
  'tab-pane': true,
20277
- active: this.show(),
20331
+ active: this.visible(),
20278
20332
  fade: this.transition(),
20279
20333
  show: this.show(),
20280
- invisible: this.tabsService.activeItem()?.disabled
20334
+ invisible: this.#tabsService.activeItem()?.disabled
20281
20335
  }), /* @ts-ignore */
20282
20336
  ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
20283
- onAnimationDone($event) {
20284
- this.show.set(this.visible());
20337
+ onTransitionEnd($event) {
20338
+ if ($event.propertyName === 'opacity' && $event.target === this.#elementRef.nativeElement) {
20339
+ this.show.set(this.visible());
20340
+ }
20285
20341
  }
20286
20342
  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: { "@fadeInOut.done": "onAnimationDone($event)" }, properties: { "class": "hostClasses()", "tabindex": "visible() ? tabindex() : -1", "attr.aria-labelledby": "attrAriaLabelledBy()", "id": "propId()", "attr.role": "role()", "@.disabled": "!transition()", "@fadeInOut": "visible() ? \"show\" : \"hide\"" } }, exportAs: ["cTabPanel"], ngImport: i0, template: '<ng-content />', isInline: true, animations: [
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
- ] });
20343
+ 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
20344
  }
20296
20345
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImport: i0, type: TabPanelComponent, decorators: [{
20297
20346
  type: Component,
@@ -20305,18 +20354,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.0", ngImpor
20305
20354
  '[attr.aria-labelledby]': 'attrAriaLabelledBy()',
20306
20355
  '[id]': 'propId()',
20307
20356
  '[attr.role]': 'role()',
20308
- '[@.disabled]': '!transition()',
20309
- '[@fadeInOut]': 'visible() ? "show" : "hide"',
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
- ]
20357
+ '(transitionend)': 'onTransitionEnd($event)'
20358
+ }
20320
20359
  }]
20321
20360
  }], 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
20361