import { Host, h } from "@stencil/core";
import { cls } from "../../utils/helpers";
export class XCollapse {
    constructor() {
        this.header = undefined;
        this.show = false;
        this.expanded = false;
    }
    /**
     * Element toggle state
     */
    async toggle() {
        this.toggleCollapse();
    }
    /**
     * Watch expanded state changes
     */
    onExpandedChange() {
        this.updateCollapse();
    }
    /**
     * On component loaded action
     */
    componentDidLoad() {
        this.container = this.el.querySelector('.collapse-container');
        if (this.show) {
            this.expanded = true;
        }
    }
    /**
     * Toggle the visibility of content
     */
    toggleCollapse() {
        this.expanded = !this.expanded;
    }
    updateCollapse() {
        const container = this.el.querySelector('.collapse-container');
        if (container.style.maxHeight) {
            this.hideCollapseContainer();
        }
        else {
            this.showCollapseContainer();
        }
    }
    hideCollapseContainer() {
        this.container.style.maxHeight = null;
        this.container.style.overflow = 'hidden';
    }
    showCollapseContainer() {
        this.container.style.maxHeight = `${this.container.scrollHeight}px`;
        setTimeout(() => {
            this.container.style.overflow = 'auto';
        }, 200);
    }
    /**
     * Render component
     */
    render() {
        var _a;
        return h(Host, { key: '7feba7ba59c75bf8a540eaad5c245ee60a6e7dbe', class: cls({ 'collapse-expanded': this.expanded }) }, h("div", { key: 'bf223c645db369281efc5b860ccf8a5774434319', class: "collapse-header", onClick: () => this.toggleCollapse() }, ((_a = this.header) === null || _a === void 0 ? void 0 : _a.length) ? h("h4", null, this.header) : h("slot", { name: "header" }), h("span", { key: '7c3e2e47cd45179bb9f6acb74f7dda3c5cea2655', class: "collapse-action" }, h("x-icon", { key: '9f276c390ecf465d05a5bfee93ebbe64e93a7438', name: this.expanded ? 'minus' : 'dropdown' }))), h("div", { key: 'bb3045c9580a34951b148a62933907daab875465', class: "collapse-container" }, h("slot", { key: 'a1873f0ffd1002a7b6691ecc68f0ae65eadd4c88' })));
    }
    static get is() { return "x-collapse"; }
    static get originalStyleUrls() {
        return {
            "$": ["./style.scss"]
        };
    }
    static get styleUrls() {
        return {
            "$": ["style.css"]
        };
    }
    static get properties() {
        return {
            "header": {
                "type": "string",
                "mutable": false,
                "complexType": {
                    "original": "string",
                    "resolved": "string",
                    "references": {}
                },
                "required": false,
                "optional": true,
                "docs": {
                    "tags": [],
                    "text": "Element title header text"
                },
                "attribute": "header",
                "reflect": false
            },
            "show": {
                "type": "boolean",
                "mutable": false,
                "complexType": {
                    "original": "boolean",
                    "resolved": "boolean",
                    "references": {}
                },
                "required": false,
                "optional": true,
                "docs": {
                    "tags": [],
                    "text": "Element show content"
                },
                "attribute": "show",
                "reflect": false,
                "defaultValue": "false"
            }
        };
    }
    static get states() {
        return {
            "expanded": {}
        };
    }
    static get methods() {
        return {
            "toggle": {
                "complexType": {
                    "signature": "() => Promise<void>",
                    "parameters": [],
                    "references": {
                        "Promise": {
                            "location": "global",
                            "id": "global::Promise"
                        }
                    },
                    "return": "Promise<void>"
                },
                "docs": {
                    "text": "Element toggle state",
                    "tags": []
                }
            }
        };
    }
    static get elementRef() { return "el"; }
    static get watchers() {
        return [{
                "propName": "expanded",
                "methodName": "onExpandedChange"
            }];
    }
}
