import { Component, Prop, State, Element, h } from '@stencil/core';
export class AccordionItem {
    constructor() {
        this.ready = false;
    }
    componentDidLoad() {
        this.ready = true;
    }
    render() {
        const containerId = this.el.parentElement.id;
        function collapseSection(element) {
            element.style.height = 0 + 'px';
            element.setAttribute('data-collapsed', 'true');
        }
        function expandSection(element) {
            element.style.height = element.scrollHeight + 'px';
            element.setAttribute('data-collapsed', 'false');
        }
        if (this.ready && containerId.length > 0) {
            document.querySelectorAll(`#${containerId}`).forEach(function (accordion) {
                const allowMultiple = accordion.hasAttribute('data-allow-multiple');
                const allowToggle = (allowMultiple) ? allowMultiple : accordion.hasAttribute('data-allow-toggle');
                const triggers = Array.prototype.slice.call(accordion.querySelectorAll('.hy-accordion__button'));
                accordion.addEventListener('click', function (event) {
                    let target = event.target;
                    if (target && target.classList.contains('hy-accordion__button')) {
                        let targetParent = target.closest('.hy-accordion__item');
                        let targetContent = targetParent.querySelectorAll('.hy-accordion__content')[0];
                        const isExpanded = target.getAttribute('aria-expanded') == 'true';
                        const active = accordion.querySelector('[aria-expanded="true"]');
                        if (!allowMultiple && active && active !== target) {
                            active.setAttribute('aria-expanded', 'false');
                            collapseSection(targetContent);
                            if (targetParent.classList.contains('hy-accordion__item__is-open')) {
                                targetParent.classList.remove('hy-accordion__item__is-open');
                            }
                            accordion.querySelector(`#${active.getAttribute('aria-controls')}`).setAttribute('aria-hidden', 'true');
                            if (!allowToggle) {
                                active.removeAttribute('aria-disabled');
                            }
                        }
                        if (!isExpanded) {
                            expandSection(targetContent);
                            target.setAttribute('aria-expanded', 'true');
                            targetParent.classList.add('hy-accordion__item__is-open');
                            accordion.querySelector(`#${target.getAttribute('aria-controls')}`).setAttribute('aria-hidden', 'false');
                            if (!allowToggle) {
                                target.setAttribute('aria-disabled', 'true');
                            }
                        }
                        else if (allowToggle && isExpanded) {
                            target.setAttribute('aria-expanded', 'false');
                            collapseSection(targetContent);
                            if (targetParent.classList.contains('hy-accordion__item__is-open')) {
                                targetParent.classList.remove('hy-accordion__item__is-open');
                            }
                            accordion.querySelector(`#${target.getAttribute('aria-controls')}`).setAttribute('aria-hidden', 'true');
                        }
                        event.preventDefault();
                        event.stopImmediatePropagation();
                    }
                });
                if (accordion) {
                    accordion.addEventListener('keydown', function (event) {
                        const target = event.target;
                        const key = event.which.toString();
                        // 33 = Page Up, 34 = Page Down
                        const ctrlModifier = (event.ctrlKey && key.match(/33|34/));
                        if (target.classList.contains('hy-accordion__button')) {
                            // Up/ Down arrow and Control + Page Up/ Page Down keyboard operations
                            // 38 = Up, 40 = Down
                            if (key.match(/38|40/) || ctrlModifier) {
                                const index = triggers.indexOf(target);
                                const direction = (key.match(/34|40/)) ? 1 : -1;
                                const length = triggers.length;
                                const newIndex = (index + length + direction) % length;
                                triggers[newIndex].focus();
                                event.preventDefault();
                            }
                            else if (key.match(/35|36/)) {
                                // 35 = End, 36 = Home keyboard operations
                                switch (key) {
                                    // Go to first accordion
                                    case '36':
                                        triggers[0].focus();
                                        break;
                                    // Go to last accordion
                                    case '35':
                                        triggers[triggers.length - 1].focus();
                                        break;
                                }
                                event.preventDefault();
                            }
                        }
                    });
                    accordion.querySelectorAll('.hy-accordion__button').forEach(function (trigger) {
                        trigger.addEventListener('focus', function () {
                            trigger.classList.add('focus');
                        });
                        trigger.addEventListener('blur', function () {
                            trigger.classList.remove('focus');
                        });
                    });
                }
            });
        }
        const classAttributes = ["hy-accordion__item"];
        const titleAsId = this.accordiontitle.toLowerCase().replace(/\W/g, '-');
        return (h("div", { class: classAttributes.join(" ") },
            h("div", { class: "hy-accordion--heading" },
                h("button", { "aria-expanded": "false", "aria-controls": `${titleAsId}--content`, class: "hy-accordion__button", id: `${titleAsId}--title` },
                    h("span", { class: "hy-accordion--heading__icon" },
                        h("hy-icon", { icon: 'hy-icon-caret-down', size: 16 })),
                    this.accordiontitle)),
            h("div", { "aria-labelledBy": `${titleAsId}--title`, class: "hy-accordion__content", id: `${titleAsId}--content`, role: "region" },
                h("div", { class: "hy-accordion__content--inner-wrapper" },
                    h("slot", null)))));
    }
    static get is() { return "hy-accordion-item"; }
    static get originalStyleUrls() { return {
        "$": ["accordion-item.scss"]
    }; }
    static get styleUrls() { return {
        "$": ["accordion-item.css"]
    }; }
    static get properties() { return {
        "accordiontitle": {
            "type": "string",
            "mutable": false,
            "complexType": {
                "original": "string",
                "resolved": "string",
                "references": {}
            },
            "required": false,
            "optional": true,
            "docs": {
                "tags": [],
                "text": ""
            },
            "attribute": "accordiontitle",
            "reflect": false
        }
    }; }
    static get states() { return {
        "ready": {}
    }; }
    static get elementRef() { return "el"; }
}