/**
 * @fileoverview added by tsickle
 * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
 */
import * as tslib_1 from "tslib";
import { CommonModule } from '@angular/common';
import { Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, NgModule, Output } from '@angular/core';
import { IgxIconModule } from '../icon/index';
/** @type {?} */
var NEXT_ID = 0;
/** @enum {number} */
var Direction = {
    NONE: 0, NEXT: 1, PREV: 2,
};
export { Direction };
Direction[Direction.NONE] = 'NONE';
Direction[Direction.NEXT] = 'NEXT';
Direction[Direction.PREV] = 'PREV';
/**
 * **Ignite UI for Angular Carousel** -
 * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/carousel.html)
 *
 * The Ignite UI Carousel is used to browse or navigate through a collection of slides. Slides can contain custom
 * content such as images or cards and be used for things such as on-boarding tutorials or page-based interfaces.
 * It can be used as a separate fullscreen element or inside another component.
 *
 * Example:
 * ```html
 * <igx-carousel>
 *   <igx-slide>
 *     <h3>First Slide Header</h3>
 *     <p>First slide Content</p>
 *   <igx-slide>
 *   <igx-slide>
 *     <h3>Second Slide Header</h3>
 *     <p>Second Slide Content</p>
 * </igx-carousel>
 * ```
 */
var IgxCarouselComponent = /** @class */ (function () {
    function IgxCarouselComponent(element) {
        this.element = element;
        /**
         * Returns the `role` attribute of the carousel.
         * ```typescript
         * let carouselRole =  this.carousel.role;
         * ```
         * \@memberof IgxCarouselComponent
         */
        this.role = 'region';
        /**
         * Sets the `id` of the carousel.
         * If not set, the `id` of the first carousel component will be `"igx-carousel-0"`.
         * ```html
         * <igx-carousel id="my-first-carousel"></igx-carousel>
         * ```
         * \@memberof IgxCarouselComponent
         */
        this.id = "igx-carousel-" + NEXT_ID++;
        /**
         * Sets whether the carousel should `loop` back to the first slide after reaching the last slide.
         * Default value is `true`.
         * ```html
         * <igx-carousel [loop]="false"></igx-carousel>
         * ```
         * \@memberOf IgxCarouselComponent
         */
        this.loop = true;
        /**
         * Sets whether the carousel will `pause` the slide transitions on user interactions.
         * Default value is `true`.
         * ```html
         *  <igx-carousel [pause]="false"></igx-carousel>
         * ```
         * \@memberOf IgxCarouselComponent
         */
        this.pause = true;
        /**
         * Controls whether the carousel should render the left/right `navigation` buttons.
         * Default value is `true`.
         * ```html
         * <igx-carousel [navigation] = "false"></igx-carousel>
         * ```
         * \@memberOf IgxCarouselComponent
         */
        this.navigation = true;
        /**
         * An event that is emitted after a slide transition has happened.
         * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.
         * ```html
         * <igx-carousel (onSlideChanged)="onSlideChanged($event)"></igx-carousel>
         * ```
         * \@memberOf IgxCarouselComponent
         */
        this.onSlideChanged = new EventEmitter();
        /**
         * An event that is emitted after a slide has been added to the carousel.
         * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.
         * ```html
         * <igx-carousel (onSlideAdded)="onSlideAdded($event)"></igx-carousel>
         * ```
         * \@memberOf IgxCarouselComponent
         */
        this.onSlideAdded = new EventEmitter();
        /**
         * An event that is emitted after a slide has been removed from the carousel.
         * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.
         * ```html
         * <igx-carousel (onSlideRemoved)="onSlideRemoved($event)"></igx-carousel>
         * ```
         * \@memberOf IgxCarouselComponent
         */
        this.onSlideRemoved = new EventEmitter();
        /**
         * An event that is emitted after the carousel has been paused.
         * Provides a reference to the `IgxCarouselComponent` as an event argument.
         * ```html
         * <igx-carousel (onCarouselPaused)="onCarouselPaused($event)"></igx-carousel>
         * ```
         * \@memberOf IgxCarouselComponent
         */
        this.onCarouselPaused = new EventEmitter();
        /**
         * An event that is emitted after the carousel has resumed transitioning between `slides`.
         * Provides a reference to the `IgxCarouselComponent` as an event argument.
         * ```html
         * <igx-carousel (onCarouselPlaying)="onCarouselPlaying($event)"></igx-carousel>
         * ```
         * \@memberOf IgxCarouselComponent
         */
        this.onCarouselPlaying = new EventEmitter();
        /**
         * The collection of `slides` currently in the carousel.
         * ```typescript
         * let slides: IgxSlideComponent[] = this.carousel.slides;
         * ```
         * \@memberOf IgxCarouselComponent
         */
        this.slides = [];
        this._total = 0;
    }
    Object.defineProperty(IgxCarouselComponent.prototype, "interval", {
        /**
         * Returns the time `interval` in milliseconds before the slide changes.
         * ```typescript
         * let timeInterval = this.carousel.interval;
         * ```
         * @memberof IgxCarouselComponent
         */
        get: /**
         * Returns the time `interval` in milliseconds before the slide changes.
         * ```typescript
         * let timeInterval = this.carousel.interval;
         * ```
         * \@memberof IgxCarouselComponent
         * @return {?}
         */
        function () {
            return this._interval;
        },
        /**
         * Sets the time `interval` in milliseconds before the slide changes.
         * If not set, the carousel will not change `slides` automatically.
         * ```html
         * <igx-carousel [interval] = "1000"></carousel>
         * ```
         * @memberof IgxCarouselComponent
         */
        set: /**
         * Sets the time `interval` in milliseconds before the slide changes.
         * If not set, the carousel will not change `slides` automatically.
         * ```html
         * <igx-carousel [interval] = "1000"></carousel>
         * ```
         * \@memberof IgxCarouselComponent
         * @param {?} value
         * @return {?}
         */
        function (value) {
            this._interval = +value;
            this._restartInterval();
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgxCarouselComponent.prototype, "tabIndex", {
        /**
         * Returns the `tabIndex` of the carousel component.
         * ```typescript
         * let tabIndex =  this.carousel.tabIndex;
         * ```
         * @memberof IgxCarouselComponent
         */
        get: /**
         * Returns the `tabIndex` of the carousel component.
         * ```typescript
         * let tabIndex =  this.carousel.tabIndex;
         * ```
         * \@memberof IgxCarouselComponent
         * @return {?}
         */
        function () {
            return 0;
        },
        enumerable: true,
        configurable: true
    });
    /**
     *@hidden
     */
    /**
     * @hidden
     * @return {?}
     */
    IgxCarouselComponent.prototype.ngOnDestroy = /**
     * @hidden
     * @return {?}
     */
    function () {
        this._destroyed = true;
        if (this._lastInterval) {
            clearInterval(this._lastInterval);
        }
    };
    /**
     * @hidden
     * @memberof IgxCarouselComponent
     */
    /**
     * @hidden
     * \@memberof IgxCarouselComponent
     * @param {?} slide
     * @return {?}
     */
    IgxCarouselComponent.prototype.setAriaLabel = /**
     * @hidden
     * \@memberof IgxCarouselComponent
     * @param {?} slide
     * @return {?}
     */
    function (slide) {
        return "Item " + (slide.index + 1) + " of " + this.total;
    };
    Object.defineProperty(IgxCarouselComponent.prototype, "total", {
        /**
         * Returns the total number of `slides` in the carousel.
         * ```typescript
         * let slideCount =  this.carousel.total;
         * ```
         * @memberOf IgxCarouselComponent
         */
        get: /**
         * Returns the total number of `slides` in the carousel.
         * ```typescript
         * let slideCount =  this.carousel.total;
         * ```
         * \@memberOf IgxCarouselComponent
         * @return {?}
         */
        function () {
            return this._total;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgxCarouselComponent.prototype, "current", {
        /**
         * The index of the slide being currently shown.
         * ```typescript
         * let currentSlideNumber =  this.carousel.current;
         * ```
         * @memberOf IgxCarouselComponent
         */
        get: /**
         * The index of the slide being currently shown.
         * ```typescript
         * let currentSlideNumber =  this.carousel.current;
         * ```
         * \@memberOf IgxCarouselComponent
         * @return {?}
         */
        function () {
            return !this._currentSlide ? 0 : this._currentSlide.index;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgxCarouselComponent.prototype, "isPlaying", {
        /**
         * Returns a boolean indicating if the carousel is playing.
         * ```typescript
         * let isPlaying =  this.carousel.isPlaying;
         * ```
         * @memberOf IgxCarouselComponent
         */
        get: /**
         * Returns a boolean indicating if the carousel is playing.
         * ```typescript
         * let isPlaying =  this.carousel.isPlaying;
         * ```
         * \@memberOf IgxCarouselComponent
         * @return {?}
         */
        function () {
            return this._playing;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgxCarouselComponent.prototype, "isDestroyed", {
        /**
         * Returns а boolean indicating if the carousel is destroyed.
         * ```typescript
         * let isDestroyed =  this.carousel.isDestroyed;
         * ```
         * @memberOf IgxCarouselComponent
         */
        get: /**
         * Returns а boolean indicating if the carousel is destroyed.
         * ```typescript
         * let isDestroyed =  this.carousel.isDestroyed;
         * ```
         * \@memberOf IgxCarouselComponent
         * @return {?}
         */
        function () {
            return this._destroyed;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(IgxCarouselComponent.prototype, "nativeElement", {
        /**
         * Returns a reference to the carousel element in the DOM.
         * ```typescript
         * let nativeElement =  this.carousel.nativeElement;
         * ```
         * @memberof IgxCarouselComponent
         */
        get: /**
         * Returns a reference to the carousel element in the DOM.
         * ```typescript
         * let nativeElement =  this.carousel.nativeElement;
         * ```
         * \@memberof IgxCarouselComponent
         * @return {?}
         */
        function () {
            return this.element.nativeElement;
        },
        enumerable: true,
        configurable: true
    });
    /**
     * Returns the slide corresponding to the provided `index` or null.
     * ```typescript
     * let slide1 =  this.carousel.get(1);
     * ```
     * @memberOf IgxCarouselComponent
     */
    /**
     * Returns the slide corresponding to the provided `index` or null.
     * ```typescript
     * let slide1 =  this.carousel.get(1);
     * ```
     * \@memberOf IgxCarouselComponent
     * @param {?} index
     * @return {?}
     */
    IgxCarouselComponent.prototype.get = /**
     * Returns the slide corresponding to the provided `index` or null.
     * ```typescript
     * let slide1 =  this.carousel.get(1);
     * ```
     * \@memberOf IgxCarouselComponent
     * @param {?} index
     * @return {?}
     */
    function (index) {
        var e_1, _a;
        try {
            for (var _b = tslib_1.__values(this.slides), _c = _b.next(); !_c.done; _c = _b.next()) {
                var each = _c.value;
                if (each.index === index) {
                    return each;
                }
            }
        }
        catch (e_1_1) { e_1 = { error: e_1_1 }; }
        finally {
            try {
                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
            }
            finally { if (e_1) throw e_1.error; }
        }
    };
    /**
     * Adds a new slide to the carousel.
     * ```typescript
     * this.carousel.add(newSlide);
     * ```
     * @memberOf IgxCarouselComponent
     */
    /**
     * Adds a new slide to the carousel.
     * ```typescript
     * this.carousel.add(newSlide);
     * ```
     * \@memberOf IgxCarouselComponent
     * @param {?} slide
     * @return {?}
     */
    IgxCarouselComponent.prototype.add = /**
     * Adds a new slide to the carousel.
     * ```typescript
     * this.carousel.add(newSlide);
     * ```
     * \@memberOf IgxCarouselComponent
     * @param {?} slide
     * @return {?}
     */
    function (slide) {
        slide.index = this.total;
        this.slides.push(slide);
        this._total += 1;
        if (this.total === 1 || slide.active) {
            this.select(slide);
            if (this.total === 1) {
                this.play();
            }
        }
        else {
            slide.active = false;
        }
        this.onSlideAdded.emit({ carousel: this, slide: slide });
    };
    /**
     * Removes a slide from the carousel.
     * ```typescript
     * this.carousel.remove(slide);
     * ```
     * @memberOf IgxCarouselComponent
     */
    /**
     * Removes a slide from the carousel.
     * ```typescript
     * this.carousel.remove(slide);
     * ```
     * \@memberOf IgxCarouselComponent
     * @param {?} slide
     * @return {?}
     */
    IgxCarouselComponent.prototype.remove = /**
     * Removes a slide from the carousel.
     * ```typescript
     * this.carousel.remove(slide);
     * ```
     * \@memberOf IgxCarouselComponent
     * @param {?} slide
     * @return {?}
     */
    function (slide) {
        if (slide && slide === this.get(slide.index)) { // check if the requested slide for delete is present in the carousel
            if (slide.index === this.current) {
                slide.active = false;
                this.next();
            }
            this.slides.splice(slide.index, 1);
            this._total -= 1;
            if (!this.total) {
                this._currentSlide = null;
                return;
            }
            for (var i = 0; i < this.total; i++) {
                this.slides[i].index = i;
            }
            this.onSlideRemoved.emit({ carousel: this, slide: slide });
        }
    };
    /**
     * Kicks in a transition for a given slide with a given `direction`.
     * ```typescript
     * this.carousel.select(this.carousel.get(2), Direction.NEXT);
     * ```
     * @memberOf IgxCarouselComponent
     */
    /**
     * Kicks in a transition for a given slide with a given `direction`.
     * ```typescript
     * this.carousel.select(this.carousel.get(2), Direction.NEXT);
     * ```
     * \@memberOf IgxCarouselComponent
     * @param {?} slide
     * @param {?=} direction
     * @return {?}
     */
    IgxCarouselComponent.prototype.select = /**
     * Kicks in a transition for a given slide with a given `direction`.
     * ```typescript
     * this.carousel.select(this.carousel.get(2), Direction.NEXT);
     * ```
     * \@memberOf IgxCarouselComponent
     * @param {?} slide
     * @param {?=} direction
     * @return {?}
     */
    function (slide, direction) {
        if (direction === void 0) { direction = Direction.NONE; }
        /** @type {?} */
        var newIndex = slide.index;
        if (direction === Direction.NONE) {
            direction = newIndex > this.current ? Direction.NEXT : Direction.PREV;
        }
        if (slide && slide !== this._currentSlide) {
            this._moveTo(slide, direction);
        }
    };
    /**
     * Transitions to the next slide in the carousel.
     * ```typescript
     * this.carousel.next();
     * ```
     * @memberOf IgxCarouselComponent
     */
    /**
     * Transitions to the next slide in the carousel.
     * ```typescript
     * this.carousel.next();
     * ```
     * \@memberOf IgxCarouselComponent
     * @return {?}
     */
    IgxCarouselComponent.prototype.next = /**
     * Transitions to the next slide in the carousel.
     * ```typescript
     * this.carousel.next();
     * ```
     * \@memberOf IgxCarouselComponent
     * @return {?}
     */
    function () {
        /** @type {?} */
        var index = (this.current + 1) % this.total;
        if (index === 0 && !this.loop) {
            this.stop();
            return;
        }
        return this.select(this.get(index), Direction.NEXT);
    };
    /**
     * Transitions to the previous slide in the carousel.
     * ```typescript
     * this.carousel.prev();
     * ```
     * @memberOf IgxCarouselComponent
     */
    /**
     * Transitions to the previous slide in the carousel.
     * ```typescript
     * this.carousel.prev();
     * ```
     * \@memberOf IgxCarouselComponent
     * @return {?}
     */
    IgxCarouselComponent.prototype.prev = /**
     * Transitions to the previous slide in the carousel.
     * ```typescript
     * this.carousel.prev();
     * ```
     * \@memberOf IgxCarouselComponent
     * @return {?}
     */
    function () {
        /** @type {?} */
        var index = this.current - 1 < 0 ?
            this.total - 1 : this.current - 1;
        if (!this.loop && index === this.total - 1) {
            this.stop();
            return;
        }
        return this.select(this.get(index), Direction.PREV);
    };
    /**
     * Resumes playing of the carousel if in paused state.
     * No operation otherwise.
     * ```typescript
     * this.carousel.play();
     * }
     * ```
     * @memberOf IgxCarouselComponent
     */
    /**
     * Resumes playing of the carousel if in paused state.
     * No operation otherwise.
     * ```typescript
     * this.carousel.play();
     * }
     * ```
     * \@memberOf IgxCarouselComponent
     * @return {?}
     */
    IgxCarouselComponent.prototype.play = /**
     * Resumes playing of the carousel if in paused state.
     * No operation otherwise.
     * ```typescript
     * this.carousel.play();
     * }
     * ```
     * \@memberOf IgxCarouselComponent
     * @return {?}
     */
    function () {
        if (!this._playing) {
            this._playing = true;
            this.onCarouselPlaying.emit(this);
            this._restartInterval();
        }
    };
    /**
     * Stops slide transitions if the `pause` option is set to `true`.
     * No operation otherwise.
     * ```typescript
     *  this.carousel.stop();
     * }
     * ```
     * @memberOf IgxCarouselComponent
     */
    /**
     * Stops slide transitions if the `pause` option is set to `true`.
     * No operation otherwise.
     * ```typescript
     *  this.carousel.stop();
     * }
     * ```
     * \@memberOf IgxCarouselComponent
     * @return {?}
     */
    IgxCarouselComponent.prototype.stop = /**
     * Stops slide transitions if the `pause` option is set to `true`.
     * No operation otherwise.
     * ```typescript
     *  this.carousel.stop();
     * }
     * ```
     * \@memberOf IgxCarouselComponent
     * @return {?}
     */
    function () {
        if (this.pause) {
            this._playing = false;
            this.onCarouselPaused.emit(this);
            this._resetInterval();
        }
    };
    /**
     *@hidden
     */
    /**
     * @hidden
     * @private
     * @param {?} slide
     * @param {?} direction
     * @return {?}
     */
    IgxCarouselComponent.prototype._moveTo = /**
     * @hidden
     * @private
     * @param {?} slide
     * @param {?} direction
     * @return {?}
     */
    function (slide, direction) {
        var _this = this;
        if (this._destroyed) {
            return;
        }
        slide.direction = direction;
        slide.active = true;
        if (this._currentSlide) {
            this._currentSlide.direction = direction;
            this._currentSlide.active = false;
        }
        this._currentSlide = slide;
        this.onSlideChanged.emit({ carousel: this, slide: slide });
        this._restartInterval();
        requestAnimationFrame(function () { return _this.nativeElement.focus(); });
    };
    /**
     *@hidden
     */
    /**
     * @hidden
     * @private
     * @return {?}
     */
    IgxCarouselComponent.prototype._resetInterval = /**
     * @hidden
     * @private
     * @return {?}
     */
    function () {
        if (this._lastInterval) {
            clearInterval(this._lastInterval);
            this._lastInterval = null;
        }
    };
    /**
     *@hidden
     */
    /**
     * @hidden
     * @private
     * @return {?}
     */
    IgxCarouselComponent.prototype._restartInterval = /**
     * @hidden
     * @private
     * @return {?}
     */
    function () {
        var _this = this;
        this._resetInterval();
        if (!isNaN(this.interval) && this.interval > 0) {
            this._lastInterval = setInterval(function () {
                /** @type {?} */
                var tick = +_this.interval;
                if (_this._playing && _this.total && !isNaN(tick) && tick > 0) {
                    _this.next();
                }
                else {
                    _this.stop();
                }
            }, this.interval);
        }
    };
    /**
     *@hidden
     */
    /**
     * @hidden
     * @return {?}
     */
    IgxCarouselComponent.prototype.onKeydownArrowRight = /**
     * @hidden
     * @return {?}
     */
    function () {
        this.next();
    };
    /**
     *@hidden
     */
    /**
     * @hidden
     * @return {?}
     */
    IgxCarouselComponent.prototype.onKeydownArrowLeft = /**
     * @hidden
     * @return {?}
     */
    function () {
        this.prev();
    };
    IgxCarouselComponent.decorators = [
        { type: Component, args: [{
                    selector: 'igx-carousel',
                    template: "<div tabindex=\"0\" aria-label=\"carousel\" class=\"igx-carousel\"\n        (mouseenter)=\"stop()\"\n        (mouseleave)=\"play()\"\n        (swipeleft)=\"next()\"\n        (swiperight)=\"prev()\"\n        (tap)=\"isPlaying ? stop() : play()\">\n    <ul class=\"igx-carousel__indicators\" [hidden]=\"slides.length <= 1\">\n        <li *ngFor=\"let slide of slides\" [attr.aria-label]=\"setAriaLabel(slide)\" [attr.aria-selected]=\"slide.active\" [class.active]=\"slide.active === true\"\n            (click)=\"select(slide)\"></li>\n    </ul>\n    <div class=\"igx-carousel__inner\" role=\"list\">\n        <ng-content></ng-content>\n    </div>\n    <div *ngIf=\"navigation\">\n        <a role=\"button\" tabindex=\"0\" class=\"igx-carousel__arrow--prev\" (click)=\"prev()\" [hidden]=\"!slides.length\">\n            <igx-icon fontSet=\"material\">arrow_back</igx-icon>\n        </a>\n        <a role=\"button\" tabindex=\"0\" class=\"igx-carousel__arrow--next\" (click)=\"next()\" [hidden]=\"!slides.length\">\n            <igx-icon fontSet=\"material\">arrow_forward</igx-icon>\n        </a>\n    </div>\n</div>\n",
                    styles: ["\n    :host {\n        display: block;\n        outline-style: none;\n    }"]
                }] }
    ];
    /** @nocollapse */
    IgxCarouselComponent.ctorParameters = function () { return [
        { type: ElementRef }
    ]; };
    IgxCarouselComponent.propDecorators = {
        role: [{ type: HostBinding, args: ['attr.role',] }],
        id: [{ type: HostBinding, args: ['attr.id',] }, { type: Input }],
        loop: [{ type: Input }],
        pause: [{ type: Input }],
        interval: [{ type: Input }],
        tabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],
        navigation: [{ type: Input }],
        onSlideChanged: [{ type: Output }],
        onSlideAdded: [{ type: Output }],
        onSlideRemoved: [{ type: Output }],
        onCarouselPaused: [{ type: Output }],
        onCarouselPlaying: [{ type: Output }],
        onKeydownArrowRight: [{ type: HostListener, args: ['keydown.arrowright',] }],
        onKeydownArrowLeft: [{ type: HostListener, args: ['keydown.arrowleft',] }]
    };
    return IgxCarouselComponent;
}());
export { IgxCarouselComponent };
if (false) {
    /**
     * Returns the `role` attribute of the carousel.
     * ```typescript
     * let carouselRole =  this.carousel.role;
     * ```
     * \@memberof IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.role;
    /**
     * Sets the `id` of the carousel.
     * If not set, the `id` of the first carousel component will be `"igx-carousel-0"`.
     * ```html
     * <igx-carousel id="my-first-carousel"></igx-carousel>
     * ```
     * \@memberof IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.id;
    /**
     * Sets whether the carousel should `loop` back to the first slide after reaching the last slide.
     * Default value is `true`.
     * ```html
     * <igx-carousel [loop]="false"></igx-carousel>
     * ```
     * \@memberOf IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.loop;
    /**
     * Sets whether the carousel will `pause` the slide transitions on user interactions.
     * Default value is `true`.
     * ```html
     *  <igx-carousel [pause]="false"></igx-carousel>
     * ```
     * \@memberOf IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.pause;
    /**
     * Controls whether the carousel should render the left/right `navigation` buttons.
     * Default value is `true`.
     * ```html
     * <igx-carousel [navigation] = "false"></igx-carousel>
     * ```
     * \@memberOf IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.navigation;
    /**
     * An event that is emitted after a slide transition has happened.
     * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.
     * ```html
     * <igx-carousel (onSlideChanged)="onSlideChanged($event)"></igx-carousel>
     * ```
     * \@memberOf IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.onSlideChanged;
    /**
     * An event that is emitted after a slide has been added to the carousel.
     * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.
     * ```html
     * <igx-carousel (onSlideAdded)="onSlideAdded($event)"></igx-carousel>
     * ```
     * \@memberOf IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.onSlideAdded;
    /**
     * An event that is emitted after a slide has been removed from the carousel.
     * Provides references to the `IgxCarouselComponent` and `IgxSlideComponent` as event arguments.
     * ```html
     * <igx-carousel (onSlideRemoved)="onSlideRemoved($event)"></igx-carousel>
     * ```
     * \@memberOf IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.onSlideRemoved;
    /**
     * An event that is emitted after the carousel has been paused.
     * Provides a reference to the `IgxCarouselComponent` as an event argument.
     * ```html
     * <igx-carousel (onCarouselPaused)="onCarouselPaused($event)"></igx-carousel>
     * ```
     * \@memberOf IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.onCarouselPaused;
    /**
     * An event that is emitted after the carousel has resumed transitioning between `slides`.
     * Provides a reference to the `IgxCarouselComponent` as an event argument.
     * ```html
     * <igx-carousel (onCarouselPlaying)="onCarouselPlaying($event)"></igx-carousel>
     * ```
     * \@memberOf IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.onCarouselPlaying;
    /**
     * The collection of `slides` currently in the carousel.
     * ```typescript
     * let slides: IgxSlideComponent[] = this.carousel.slides;
     * ```
     * \@memberOf IgxCarouselComponent
     * @type {?}
     */
    IgxCarouselComponent.prototype.slides;
    /**
     * @type {?}
     * @private
     */
    IgxCarouselComponent.prototype._interval;
    /**
     * @type {?}
     * @private
     */
    IgxCarouselComponent.prototype._lastInterval;
    /**
     * @type {?}
     * @private
     */
    IgxCarouselComponent.prototype._playing;
    /**
     * @type {?}
     * @private
     */
    IgxCarouselComponent.prototype._currentSlide;
    /**
     * @type {?}
     * @private
     */
    IgxCarouselComponent.prototype._destroyed;
    /**
     * @type {?}
     * @private
     */
    IgxCarouselComponent.prototype._total;
    /**
     * @type {?}
     * @private
     */
    IgxCarouselComponent.prototype.element;
}
/**
 * A slide component that usually holds an image and/or a caption text.
 * IgxSlideComponent is usually a child component of an IgxCarouselComponent.
 *
 * ```
 * <igx-slide [input bindings] >
 *    <ng-content></ng-content>
 * </igx-slide>
 * ```
 *
 * @export
 */
var IgxSlideComponent = /** @class */ (function () {
    function IgxSlideComponent(carousel) {
        this.carousel = carousel;
    }
    /**
     *@hidden
     */
    /**
     * @hidden
     * @return {?}
     */
    IgxSlideComponent.prototype.ngOnInit = /**
     * @hidden
     * @return {?}
     */
    function () {
        this.carousel.add(this);
    };
    /**
     *@hidden
     */
    /**
     * @hidden
     * @return {?}
     */
    IgxSlideComponent.prototype.ngOnDestroy = /**
     * @hidden
     * @return {?}
     */
    function () {
        this.carousel.remove(this);
    };
    IgxSlideComponent.decorators = [
        { type: Component, args: [{
                    selector: 'igx-slide',
                    template: "<div\n    role=\"listitem\"\n    [class.active]=\"active\"\n    class=\"igx-slide\"\n    [attr.aria-selected]=\"active\"\n    [attr.aria-live]=\"active ? 'polite' : null\"\n    [attr.tabIndex]=\"active ? 0 : null\"\n>\n    <ng-content></ng-content>\n</div>\n"
                }] }
    ];
    /** @nocollapse */
    IgxSlideComponent.ctorParameters = function () { return [
        { type: IgxCarouselComponent }
    ]; };
    IgxSlideComponent.propDecorators = {
        index: [{ type: Input }],
        direction: [{ type: Input }],
        active: [{ type: HostBinding, args: ['class.active',] }, { type: Input }]
    };
    return IgxSlideComponent;
}());
export { IgxSlideComponent };
if (false) {
    /**
     * Gets/sets the `index` of the slide inside the carousel.
     * ```html
     * <igx-carousel>
     *  <igx-slide index = "1"</igx-slide>
     * <igx-carousel>
     * ```
     * \@memberOf IgxSlideComponent
     * @type {?}
     */
    IgxSlideComponent.prototype.index;
    /**
     * Gets/sets the target `direction` for the slide.
     * ```html
     * <igx-carousel>
     *  <igx-slide direction="NEXT"</igx-slide>
     * <igx-carousel>
     * ```
     * \@memberOf IgxSlideComponent
     * @type {?}
     */
    IgxSlideComponent.prototype.direction;
    /**
     * Gets/sets the `active` state of the slide.
     * ```html
     * <igx-carousel>
     *  <igx-slide [active] ="false"</igx-slide>
     * <igx-carousel>
     * ```
     * \@memberof IgxSlideComponent
     * @type {?}
     */
    IgxSlideComponent.prototype.active;
    /**
     * @type {?}
     * @private
     */
    IgxSlideComponent.prototype.carousel;
}
/**
 * @record
 */
export function ISlideEventArgs() { }
if (false) {
    /** @type {?} */
    ISlideEventArgs.prototype.carousel;
    /** @type {?} */
    ISlideEventArgs.prototype.slide;
}
/**
 * @hidden
 */
var IgxCarouselModule = /** @class */ (function () {
    function IgxCarouselModule() {
    }
    IgxCarouselModule.decorators = [
        { type: NgModule, args: [{
                    declarations: [IgxCarouselComponent, IgxSlideComponent],
                    exports: [IgxCarouselComponent, IgxSlideComponent],
                    imports: [CommonModule, IgxIconModule]
                },] }
    ];
    return IgxCarouselModule;
}());
export { IgxCarouselModule };
//# sourceMappingURL=data:application/json;base64, 