import { __assign, __spread } from 'tslib';
import { ɵɵdefineDirective, ɵɵclassProp, ɵsetClassMetadata, Directive, Input, ɵɵdefineComponent, ɵɵelement, Component, ChangeDetectionStrategy, ɵɵNgOnChangesFeature, ɵɵstyleMap, ɵɵelementStart, ɵɵelementEnd, ɵɵnextContext, ɵɵadvance, ɵɵproperty, ɵɵstyleProp, ɵɵtemplate, ɵɵelementContainerStart, ɵɵelementContainerEnd, ɵɵprojection, ɵɵdirectiveInject, ChangeDetectorRef, Renderer2, ElementRef, ɵɵprojectionDef, ViewEncapsulation, ɵɵdefineNgModule, ɵɵdefineInjector, ɵɵsetNgModuleScope, NgModule } from '@angular/core';
import { toCssPixel } from 'ng-zorro-antd/core';
import { NgIf, NgForOf, CommonModule } from '@angular/common';

/**
 * @license
 * Copyright Alibaba.com All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */
var _c0 = ["nzType", "button"];
var _c1 = ["nzType", "avatar"];
var _c2 = ["nzType", "input"];
var NzSkeletonElementDirective = /** @class */ (function () {
    function NzSkeletonElementDirective() {
        this.nzActive = false;
    }
    /** @nocollapse */ NzSkeletonElementDirective.ɵfac = function NzSkeletonElementDirective_Factory(t) { return new (t || NzSkeletonElementDirective)(); };
    /** @nocollapse */ NzSkeletonElementDirective.ɵdir = ɵɵdefineDirective({ type: NzSkeletonElementDirective, selectors: [["nz-skeleton-element"]], hostVars: 6, hostBindings: function NzSkeletonElementDirective_HostBindings(rf, ctx) { if (rf & 2) {
            ɵɵclassProp("ant-skeleton", true)("ant-skeleton-element", true)("ant-skeleton-active", ctx.nzActive);
        } }, inputs: { nzActive: "nzActive", nzType: "nzType" } });
    return NzSkeletonElementDirective;
}());
/*@__PURE__*/ (function () { ɵsetClassMetadata(NzSkeletonElementDirective, [{
        type: Directive,
        args: [{
                selector: 'nz-skeleton-element',
                host: {
                    '[class.ant-skeleton]': 'true',
                    '[class.ant-skeleton-element]': 'true',
                    '[class.ant-skeleton-active]': 'nzActive'
                }
            }]
    }], null, { nzActive: [{
            type: Input
        }], nzType: [{
            type: Input
        }] }); })();
var NzSkeletonElementButtonComponent = /** @class */ (function () {
    function NzSkeletonElementButtonComponent() {
    }
    /** @nocollapse */ NzSkeletonElementButtonComponent.ɵfac = function NzSkeletonElementButtonComponent_Factory(t) { return new (t || NzSkeletonElementButtonComponent)(); };
    /** @nocollapse */ NzSkeletonElementButtonComponent.ɵcmp = ɵɵdefineComponent({ type: NzSkeletonElementButtonComponent, selectors: [["nz-skeleton-element", "nzType", "button"]], inputs: { nzShape: "nzShape", nzSize: "nzSize" }, attrs: _c0, decls: 1, vars: 10, template: function NzSkeletonElementButtonComponent_Template(rf, ctx) { if (rf & 1) {
            ɵɵelement(0, "span");
        } if (rf & 2) {
            ɵɵclassProp("ant-skeleton-button", true)("ant-skeleton-button-round", ctx.nzShape === "round")("ant-skeleton-button-circle", ctx.nzShape === "circle")("ant-skeleton-button-lg", ctx.nzSize === "large")("ant-skeleton-button-sm", ctx.nzSize === "small");
        } }, encapsulation: 2, changeDetection: 0 });
    return NzSkeletonElementButtonComponent;
}());
/*@__PURE__*/ (function () { ɵsetClassMetadata(NzSkeletonElementButtonComponent, [{
        type: Component,
        args: [{
                changeDetection: ChangeDetectionStrategy.OnPush,
                selector: 'nz-skeleton-element[nzType="button"]',
                template: "\n    <span\n      [class.ant-skeleton-button]=\"true\"\n      [class.ant-skeleton-button-round]=\"nzShape === 'round'\"\n      [class.ant-skeleton-button-circle]=\"nzShape === 'circle'\"\n      [class.ant-skeleton-button-lg]=\"nzSize === 'large'\"\n      [class.ant-skeleton-button-sm]=\"nzSize === 'small'\"\n    >\n    </span>\n  "
            }]
    }], null, { nzShape: [{
            type: Input
        }], nzSize: [{
            type: Input
        }] }); })();
var NzSkeletonElementAvatarComponent = /** @class */ (function () {
    function NzSkeletonElementAvatarComponent() {
        this.styleMap = {};
    }
    NzSkeletonElementAvatarComponent.prototype.ngOnChanges = function (changes) {
        if (changes.nzSize && typeof this.nzSize === 'number') {
            var sideLength = this.nzSize + "px";
            this.styleMap = { width: sideLength, height: sideLength, 'line-height': sideLength };
        }
        else {
            this.styleMap = {};
        }
    };
    /** @nocollapse */ NzSkeletonElementAvatarComponent.ɵfac = function NzSkeletonElementAvatarComponent_Factory(t) { return new (t || NzSkeletonElementAvatarComponent)(); };
    /** @nocollapse */ NzSkeletonElementAvatarComponent.ɵcmp = ɵɵdefineComponent({ type: NzSkeletonElementAvatarComponent, selectors: [["nz-skeleton-element", "nzType", "avatar"]], inputs: { nzShape: "nzShape", nzSize: "nzSize" }, features: [ɵɵNgOnChangesFeature], attrs: _c1, decls: 1, vars: 12, template: function NzSkeletonElementAvatarComponent_Template(rf, ctx) { if (rf & 1) {
            ɵɵelement(0, "span");
        } if (rf & 2) {
            ɵɵstyleMap(ctx.styleMap);
            ɵɵclassProp("ant-skeleton-avatar", true)("ant-skeleton-avatar-square", ctx.nzShape === "square")("ant-skeleton-avatar-circle", ctx.nzShape === "circle")("ant-skeleton-avatar-lg", ctx.nzSize === "large")("ant-skeleton-avatar-sm", ctx.nzSize === "small");
        } }, encapsulation: 2, changeDetection: 0 });
    return NzSkeletonElementAvatarComponent;
}());
/*@__PURE__*/ (function () { ɵsetClassMetadata(NzSkeletonElementAvatarComponent, [{
        type: Component,
        args: [{
                changeDetection: ChangeDetectionStrategy.OnPush,
                selector: 'nz-skeleton-element[nzType="avatar"]',
                template: "\n    <span\n      [class.ant-skeleton-avatar]=\"true\"\n      [class.ant-skeleton-avatar-square]=\"nzShape === 'square'\"\n      [class.ant-skeleton-avatar-circle]=\"nzShape === 'circle'\"\n      [class.ant-skeleton-avatar-lg]=\"nzSize === 'large'\"\n      [class.ant-skeleton-avatar-sm]=\"nzSize === 'small'\"\n      [style]=\"styleMap\"\n    >\n    </span>\n  "
            }]
    }], null, { nzShape: [{
            type: Input
        }], nzSize: [{
            type: Input
        }] }); })();
var NzSkeletonElementInputComponent = /** @class */ (function () {
    function NzSkeletonElementInputComponent() {
    }
    /** @nocollapse */ NzSkeletonElementInputComponent.ɵfac = function NzSkeletonElementInputComponent_Factory(t) { return new (t || NzSkeletonElementInputComponent)(); };
    /** @nocollapse */ NzSkeletonElementInputComponent.ɵcmp = ɵɵdefineComponent({ type: NzSkeletonElementInputComponent, selectors: [["nz-skeleton-element", "nzType", "input"]], inputs: { nzSize: "nzSize" }, attrs: _c2, decls: 1, vars: 6, template: function NzSkeletonElementInputComponent_Template(rf, ctx) { if (rf & 1) {
            ɵɵelement(0, "span");
        } if (rf & 2) {
            ɵɵclassProp("ant-skeleton-input", true)("ant-skeleton-input-lg", ctx.nzSize === "large")("ant-skeleton-input-sm", ctx.nzSize === "small");
        } }, encapsulation: 2, changeDetection: 0 });
    return NzSkeletonElementInputComponent;
}());
/*@__PURE__*/ (function () { ɵsetClassMetadata(NzSkeletonElementInputComponent, [{
        type: Component,
        args: [{
                changeDetection: ChangeDetectionStrategy.OnPush,
                selector: 'nz-skeleton-element[nzType="input"]',
                template: "\n    <span\n      [class.ant-skeleton-input]=\"true\"\n      [class.ant-skeleton-input-lg]=\"nzSize === 'large'\"\n      [class.ant-skeleton-input-sm]=\"nzSize === 'small'\"\n    >\n    </span>\n  "
            }]
    }], null, { nzSize: [{
            type: Input
        }] }); })();

function NzSkeletonComponent_ng_container_0_div_1_Template(rf, ctx) { if (rf & 1) {
    ɵɵelementStart(0, "div", 5);
    ɵɵelement(1, "nz-skeleton-element", 6);
    ɵɵelementEnd();
} if (rf & 2) {
    var ctx_r274 = ɵɵnextContext(2);
    ɵɵadvance(1);
    ɵɵproperty("nzSize", ctx_r274.avatar.size)("nzShape", ctx_r274.avatar.shape);
} }
function NzSkeletonComponent_ng_container_0_h3_3_Template(rf, ctx) { if (rf & 1) {
    ɵɵelement(0, "h3", 7);
} if (rf & 2) {
    var ctx_r275 = ɵɵnextContext(2);
    ɵɵstyleProp("width", ctx_r275.toCSSUnit(ctx_r275.title.width));
} }
function NzSkeletonComponent_ng_container_0_ul_4_li_1_Template(rf, ctx) { if (rf & 1) {
    ɵɵelement(0, "li");
} if (rf & 2) {
    var i_r279 = ctx.index;
    var ctx_r277 = ɵɵnextContext(3);
    ɵɵstyleProp("width", ctx_r277.toCSSUnit(ctx_r277.widthList[i_r279]));
} }
function NzSkeletonComponent_ng_container_0_ul_4_Template(rf, ctx) { if (rf & 1) {
    ɵɵelementStart(0, "ul", 8);
    ɵɵtemplate(1, NzSkeletonComponent_ng_container_0_ul_4_li_1_Template, 1, 2, "li", 9);
    ɵɵelementEnd();
} if (rf & 2) {
    var ctx_r276 = ɵɵnextContext(2);
    ɵɵadvance(1);
    ɵɵproperty("ngForOf", ctx_r276.rowsList);
} }
function NzSkeletonComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {
    ɵɵelementContainerStart(0);
    ɵɵtemplate(1, NzSkeletonComponent_ng_container_0_div_1_Template, 2, 2, "div", 1);
    ɵɵelementStart(2, "div", 2);
    ɵɵtemplate(3, NzSkeletonComponent_ng_container_0_h3_3_Template, 1, 2, "h3", 3);
    ɵɵtemplate(4, NzSkeletonComponent_ng_container_0_ul_4_Template, 2, 1, "ul", 4);
    ɵɵelementEnd();
    ɵɵelementContainerEnd();
} if (rf & 2) {
    var ctx_r272 = ɵɵnextContext();
    ɵɵadvance(1);
    ɵɵproperty("ngIf", !!ctx_r272.nzAvatar);
    ɵɵadvance(2);
    ɵɵproperty("ngIf", !!ctx_r272.nzTitle);
    ɵɵadvance(1);
    ɵɵproperty("ngIf", !!ctx_r272.nzParagraph);
} }
function NzSkeletonComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {
    ɵɵelementContainerStart(0);
    ɵɵprojection(1);
    ɵɵelementContainerEnd();
} }
var _c0$1 = ["*"];
var NzSkeletonComponent = /** @class */ (function () {
    function NzSkeletonComponent(cdr, renderer, elementRef) {
        this.cdr = cdr;
        this.nzActive = false;
        this.nzLoading = true;
        this.nzTitle = true;
        this.nzAvatar = false;
        this.nzParagraph = true;
        this.rowsList = [];
        this.widthList = [];
        renderer.addClass(elementRef.nativeElement, 'ant-skeleton');
    }
    NzSkeletonComponent.prototype.toCSSUnit = function (value) {
        if (value === void 0) { value = ''; }
        return toCssPixel(value);
    };
    NzSkeletonComponent.prototype.getTitleProps = function () {
        var hasAvatar = !!this.nzAvatar;
        var hasParagraph = !!this.nzParagraph;
        var width = '';
        if (!hasAvatar && hasParagraph) {
            width = '38%';
        }
        else if (hasAvatar && hasParagraph) {
            width = '50%';
        }
        return __assign({ width: width }, this.getProps(this.nzTitle));
    };
    NzSkeletonComponent.prototype.getAvatarProps = function () {
        var shape = !!this.nzTitle && !this.nzParagraph ? 'square' : 'circle';
        var size = 'large';
        return __assign({ shape: shape, size: size }, this.getProps(this.nzAvatar));
    };
    NzSkeletonComponent.prototype.getParagraphProps = function () {
        var hasAvatar = !!this.nzAvatar;
        var hasTitle = !!this.nzTitle;
        var basicProps = {};
        // Width
        if (!hasAvatar || !hasTitle) {
            basicProps.width = '61%';
        }
        // Rows
        if (!hasAvatar && hasTitle) {
            basicProps.rows = 3;
        }
        else {
            basicProps.rows = 2;
        }
        return __assign(__assign({}, basicProps), this.getProps(this.nzParagraph));
    };
    NzSkeletonComponent.prototype.getProps = function (prop) {
        return prop && typeof prop === 'object' ? prop : {};
    };
    NzSkeletonComponent.prototype.getWidthList = function () {
        var _a = this.paragraph, width = _a.width, rows = _a.rows;
        var widthList = [];
        if (width && Array.isArray(width)) {
            widthList = width;
        }
        else if (width && !Array.isArray(width)) {
            widthList = [];
            widthList[rows - 1] = width;
        }
        return widthList;
    };
    NzSkeletonComponent.prototype.updateProps = function () {
        this.title = this.getTitleProps();
        this.avatar = this.getAvatarProps();
        this.paragraph = this.getParagraphProps();
        this.rowsList = __spread(Array(this.paragraph.rows));
        this.widthList = this.getWidthList();
        this.cdr.markForCheck();
    };
    NzSkeletonComponent.prototype.ngOnInit = function () {
        this.updateProps();
    };
    NzSkeletonComponent.prototype.ngOnChanges = function (changes) {
        if (changes.nzTitle || changes.nzAvatar || changes.nzParagraph) {
            this.updateProps();
        }
    };
    /** @nocollapse */ NzSkeletonComponent.ɵfac = function NzSkeletonComponent_Factory(t) { return new (t || NzSkeletonComponent)(ɵɵdirectiveInject(ChangeDetectorRef), ɵɵdirectiveInject(Renderer2), ɵɵdirectiveInject(ElementRef)); };
    /** @nocollapse */ NzSkeletonComponent.ɵcmp = ɵɵdefineComponent({ type: NzSkeletonComponent, selectors: [["nz-skeleton"]], hostVars: 4, hostBindings: function NzSkeletonComponent_HostBindings(rf, ctx) { if (rf & 2) {
            ɵɵclassProp("ant-skeleton-with-avatar", !!ctx.nzAvatar)("ant-skeleton-active", ctx.nzActive);
        } }, inputs: { nzActive: "nzActive", nzLoading: "nzLoading", nzTitle: "nzTitle", nzAvatar: "nzAvatar", nzParagraph: "nzParagraph" }, exportAs: ["nzSkeleton"], features: [ɵɵNgOnChangesFeature], ngContentSelectors: _c0$1, decls: 2, vars: 2, consts: [[4, "ngIf"], ["class", "ant-skeleton-header", 4, "ngIf"], [1, "ant-skeleton-content"], ["class", "ant-skeleton-title", 3, "width", 4, "ngIf"], ["class", "ant-skeleton-paragraph", 4, "ngIf"], [1, "ant-skeleton-header"], ["nzType", "avatar", 3, "nzSize", "nzShape"], [1, "ant-skeleton-title"], [1, "ant-skeleton-paragraph"], [3, "width", 4, "ngFor", "ngForOf"]], template: function NzSkeletonComponent_Template(rf, ctx) { if (rf & 1) {
            ɵɵprojectionDef();
            ɵɵtemplate(0, NzSkeletonComponent_ng_container_0_Template, 5, 3, "ng-container", 0);
            ɵɵtemplate(1, NzSkeletonComponent_ng_container_1_Template, 2, 0, "ng-container", 0);
        } if (rf & 2) {
            ɵɵproperty("ngIf", ctx.nzLoading);
            ɵɵadvance(1);
            ɵɵproperty("ngIf", !ctx.nzLoading);
        } }, directives: [NgIf, NzSkeletonElementDirective, NzSkeletonElementAvatarComponent, NgForOf], encapsulation: 2, changeDetection: 0 });
    return NzSkeletonComponent;
}());
/*@__PURE__*/ (function () { ɵsetClassMetadata(NzSkeletonComponent, [{
        type: Component,
        args: [{
                changeDetection: ChangeDetectionStrategy.OnPush,
                encapsulation: ViewEncapsulation.None,
                selector: 'nz-skeleton',
                exportAs: 'nzSkeleton',
                host: {
                    '[class.ant-skeleton-with-avatar]': '!!nzAvatar',
                    '[class.ant-skeleton-active]': 'nzActive'
                },
                template: "\n    <ng-container *ngIf=\"nzLoading\">\n      <div class=\"ant-skeleton-header\" *ngIf=\"!!nzAvatar\">\n        <nz-skeleton-element nzType=\"avatar\" [nzSize]=\"avatar.size\" [nzShape]=\"avatar.shape\"></nz-skeleton-element>\n      </div>\n      <div class=\"ant-skeleton-content\">\n        <h3 *ngIf=\"!!nzTitle\" class=\"ant-skeleton-title\" [style.width]=\"toCSSUnit(title.width)\"></h3>\n        <ul *ngIf=\"!!nzParagraph\" class=\"ant-skeleton-paragraph\">\n          <li *ngFor=\"let row of rowsList; let i = index\" [style.width]=\"toCSSUnit(widthList[i])\"></li>\n        </ul>\n      </div>\n    </ng-container>\n    <ng-container *ngIf=\"!nzLoading\">\n      <ng-content></ng-content>\n    </ng-container>\n  "
            }]
    }], function () { return [{ type: ChangeDetectorRef }, { type: Renderer2 }, { type: ElementRef }]; }, { nzActive: [{
            type: Input
        }], nzLoading: [{
            type: Input
        }], nzTitle: [{
            type: Input
        }], nzAvatar: [{
            type: Input
        }], nzParagraph: [{
            type: Input
        }] }); })();

/**
 * @license
 * Copyright Alibaba.com All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */
var NzSkeletonModule = /** @class */ (function () {
    function NzSkeletonModule() {
    }
    /** @nocollapse */ NzSkeletonModule.ɵmod = ɵɵdefineNgModule({ type: NzSkeletonModule });
    /** @nocollapse */ NzSkeletonModule.ɵinj = ɵɵdefineInjector({ factory: function NzSkeletonModule_Factory(t) { return new (t || NzSkeletonModule)(); }, imports: [[CommonModule]] });
    return NzSkeletonModule;
}());
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && ɵɵsetNgModuleScope(NzSkeletonModule, { declarations: [NzSkeletonComponent,
        NzSkeletonElementDirective,
        NzSkeletonElementButtonComponent,
        NzSkeletonElementAvatarComponent,
        NzSkeletonElementInputComponent], imports: [CommonModule], exports: [NzSkeletonComponent,
        NzSkeletonElementDirective,
        NzSkeletonElementButtonComponent,
        NzSkeletonElementAvatarComponent,
        NzSkeletonElementInputComponent] }); })();
/*@__PURE__*/ (function () { ɵsetClassMetadata(NzSkeletonModule, [{
        type: NgModule,
        args: [{
                declarations: [
                    NzSkeletonComponent,
                    NzSkeletonElementDirective,
                    NzSkeletonElementButtonComponent,
                    NzSkeletonElementAvatarComponent,
                    NzSkeletonElementInputComponent
                ],
                imports: [CommonModule],
                exports: [
                    NzSkeletonComponent,
                    NzSkeletonElementDirective,
                    NzSkeletonElementButtonComponent,
                    NzSkeletonElementAvatarComponent,
                    NzSkeletonElementInputComponent
                ]
            }]
    }], null, null); })();

/**
 * @license
 * Copyright Alibaba.com All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
 */

/**
 * Generated bundle index. Do not edit.
 */

export { NzSkeletonComponent, NzSkeletonElementAvatarComponent, NzSkeletonElementButtonComponent, NzSkeletonElementDirective, NzSkeletonElementInputComponent, NzSkeletonModule };
//# sourceMappingURL=ng-zorro-antd-skeleton.js.map
