{"version":3,"sources":["jsdelivr-header.js","/npm/paper-checkbox-tree@0.1.12/src/index.js"],"names":[],"mappings":"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","file":"/npm/paper-checkbox-tree@0.1.12/dist/cjs.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/paper-checkbox-tree@0.1.12/dist/cjs.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","export default class CheckboxTree {\n    /**\n     * Default configuration for the CheckboxTree component.\n     * @returns {Object} The default CSS class names for various elements.\n     */\n    get Defaults() {\n        return {\n            groupAllOptions: false,\n            groupAllLabel: \"All\",\n            rootClassName: \"pct-tree\",\n            innerClassName: \"pct-tree__inner\",\n            groupClassName: \"pct-group\",\n            groupHeaderClassName: \"pct-group__header\",\n            groupLabelClassName: \"pct-group__label\",\n            groupTextClassName: \"pct-group__text\",\n            optionClassName: \"pct-option\",\n            optionLabelClassName: \"pct-option__label\",\n            optionInputClassName: \"pct-option__input\",\n            optionTextClassName: \"pct-option__text\",\n            checkboxCheckedClassName: \"pct-checkbox--checked\",\n            checkboxIndeterminateClassName: \"pct-checkbox--partial\",\n            checkboxDisabledClassName: \"pct-checkbox--disabled\",\n        };\n    }\n\n    /**\n     * Constructor for the CheckboxTree class.\n     * @param {HTMLSelectElement} select - The select element to transform into a checkbox tree.\n     * @param {Object} [options] - Custom options to override default settings.\n     */\n    constructor(select, options) {\n        this.$select = select;\n        this.options = Object.assign({}, this.Defaults, options);\n\n        // Read some options from data attributes.\n        const groupAllOptions = this.$select.getAttribute(\"data-pct-group-all-options\");\n        if (groupAllOptions !== null) {\n            this.options.groupAllOptions = true;\n            this.options.groupAllLabel = groupAllOptions || this.options.groupAllLabel;\n        }\n\n        this.hideSelect();\n        this.buildDOM();\n        this.addEventListeners();\n    }\n\n    /**\n     * Hides the original select element.\n     */\n    hideSelect() {\n        this.$select.classList.remove(this.options.rootClassName);\n        this.$select.hidden = true;\n        this.$select.disabled = true;\n        this.$select.style.display = \"none\";\n    }\n\n    /**\n     * Builds the DOM structure for the checkbox tree.\n     */\n    buildDOM() {\n        this.$root = this._createRoot();\n        this.$select.after(this.$root);\n\n        this.$inner = this._createInner();\n        this.$root.appendChild(this.$inner);\n\n        this._fillInner();\n        this._setInitialTabIndexes();\n    }\n\n    /**\n     * Creates the root element of the checkbox tree.\n     * @returns {HTMLDivElement} The root element.\n     * @private\n     */\n    _createRoot() {\n        const root = document.createElement(\"div\");\n        root.classList.add(this.options.rootClassName);\n        return root;\n    }\n\n    /**\n     * Creates the inner container of the checkbox tree.\n     * @returns {HTMLDivElement} The inner container.\n     * @private\n     */\n    _createInner() {\n        const inner = document.createElement(\"div\");\n        inner.classList.add(this.options.innerClassName);\n        return inner;\n    }\n\n    /**\n     * Fills the inner container with groups and options\n     * based on the original select element.\n     * @private\n     */\n    _fillInner() {\n        const fragment = document.createDocumentFragment();\n        const children = Array.from(this.$select.children);\n\n        if (!children.length) {\n            return\n        }\n\n        const hasOptgroup = children.some((node) => node.tagName === \"OPTGROUP\");\n        if (!hasOptgroup && this.options.groupAllOptions) {\n            fragment.appendChild(this.createGroup(this.$select, this.options.groupAllLabel));\n        } else {\n            children.forEach((node) => {\n                if (node.tagName === \"OPTGROUP\") {\n                    fragment.appendChild(this.createGroup(node));\n                } else {\n                    fragment.appendChild(this.createOption(node));\n                }\n            });\n        }\n\n        this.$inner.appendChild(fragment);\n    }\n\n    /**\n     * Creates a group element based on an OPTGROUP element.\n     * @param {HTMLOptGroupElement|HTMLSelectElement} source - The source OPTGROUP element.\n     * @param {string} [label] - The label of the group.\n     * @returns {HTMLDivElement} The group element.\n     * @private\n     */\n    createGroup(source, label) {\n        const group = document.createElement(\"div\");\n        group.classList.add(this.options.groupClassName);\n\n        const header = this._createGroupHeader(source, label);\n        group.appendChild(header);\n\n        const fragment = document.createDocumentFragment();\n        Array.from(source.children).forEach((node) => {\n            fragment.appendChild(this.createOption(node));\n        });\n        group.appendChild(fragment);\n\n        this.updateGroup(group);\n        return group;\n    }\n\n    /**\n     * Creates the header for a group element.\n     * @param {HTMLOptGroupElement} source - The source OPTGROUP element.\n     * @param {string} [label] - The label of the group.\n     * @returns {HTMLDivElement} The group header element.\n     * @private\n     */\n    _createGroupHeader(source, label) {\n        const header = document.createElement(\"div\");\n        header.classList.add(this.options.groupHeaderClassName);\n\n        const labelNode = document.createElement(\"div\");\n        labelNode.classList.add(this.options.groupLabelClassName);\n        header.appendChild(labelNode);\n\n        labelNode.insertAdjacentHTML(\"beforeend\", this.buildCheckboxIcon());\n\n        const headerText = document.createElement(\"span\");\n        headerText.classList.add(this.options.groupTextClassName);\n        headerText.textContent = label || source.label;\n        labelNode.appendChild(headerText);\n\n        return header;\n    }\n\n    /**\n     * Retrieves the checked states of options within a group.\n     * @param {HTMLElement} group - The group element.\n     * @returns {number[]} Array of states where 1 represents checked\n     *   and 0 represents unchecked.\n     * @private\n     */\n    _getGroupStates(group) {\n        const optionStates = [];\n        const options = group.querySelectorAll(\n            `.${this.options.optionClassName}`,\n        );\n\n        options.forEach((option) => {\n            const input = option.querySelector(\n                `.${this.options.optionInputClassName}`,\n            );\n            if (input && !input.disabled) {\n                optionStates.push(input.checked ? 1 : 0);\n            }\n        });\n        return optionStates;\n    }\n\n    /**\n     * Updates the visual state of a group based on its options.\n     * @param {HTMLElement} group - The group element.\n     * @private\n     */\n    updateGroup(group) {\n        const header = group.querySelector(\n            `.${this.options.groupHeaderClassName}`,\n        );\n        const icon = header.querySelector(\"svg\");\n        const groupStates = this._getGroupStates(group);\n\n        if (groupStates.every((s) => s === 1)) {\n            this.setIconState(icon, \"checked\");\n        } else if (groupStates.some((s) => s === 1)) {\n            this.setIconState(icon, \"partial\");\n        } else {\n            this.setIconState(icon, \"none\");\n        }\n    }\n\n    /**\n     * Creates an option element based on an OPTION element.\n     * @param {HTMLOptionElement} source - The source OPTION element.\n     * @returns {HTMLDivElement} The option element.\n     * @private\n     */\n    createOption(source) {\n        const option = document.createElement(\"div\");\n        option.classList.add(this.options.optionClassName);\n\n        const label = document.createElement(\"label\");\n        label.classList.add(this.options.optionLabelClassName);\n        option.appendChild(label);\n\n        const checkbox = document.createElement(\"input\");\n        checkbox.classList.add(this.options.optionInputClassName);\n        checkbox.type = \"checkbox\";\n        checkbox.name = this.$select.name;\n        checkbox.value = source.value;\n        checkbox.tabIndex = -1;\n        if (source.selected) {\n            checkbox.toggleAttribute(\"checked\", true);\n        }\n        if (source.disabled) {\n            checkbox.toggleAttribute(\"disabled\", true);\n        }\n        label.appendChild(checkbox);\n\n        label.insertAdjacentHTML(\"beforeend\", this.buildCheckboxIcon());\n\n        const labelText = document.createElement(\"span\");\n        labelText.classList.add(this.options.optionTextClassName);\n        labelText.textContent = source.textContent;\n        label.appendChild(labelText);\n\n        this.updateOption(option);\n        return option;\n    }\n\n    /**\n     * Updates the visual state of an option element.\n     * @param {HTMLElement} option - The option element.\n     * @private\n     */\n    updateOption(option) {\n        const checkbox = option.querySelector(\n            `.${this.options.optionInputClassName}`,\n        );\n        const icon = option.querySelector(\"svg\");\n        icon.classList.toggle(\n            this.options.checkboxCheckedClassName,\n            checkbox.checked,\n        );\n        icon.classList.toggle(\n            this.options.checkboxDisabledClassName,\n            checkbox.disabled,\n        );\n    }\n\n    /**\n     * Builds the SVG icon for checkboxes.\n     * @returns {string} The SVG markup.\n     */\n    buildCheckboxIcon() {\n        return `\n            <svg class=\"pct-checkbox\" width=\"22\" height=\"22\" fill=\"none\">\n              <rect class=\"pct-checkbox__box\"></rect>\n              <path class=\"pct-checkbox__marker\" d=\"M4,13 8,17 18,6\"></path>\n              <path class=\"pct-checkbox__line\" d=\"M5,11 17,11\"></path>\n            </svg>\n        `;\n    }\n\n    /**\n     * Sets the visual state of an icon.\n     * @param {SVGElement} icon - The icon element.\n     * @param {\"none\"|\"checked\"|\"partial\"} state - The state to set.\n     * @private\n     */\n    setIconState(icon, state) {\n        icon.classList.toggle(\n            this.options.checkboxCheckedClassName,\n            state === \"checked\",\n        );\n        icon.classList.toggle(\n            this.options.checkboxIndeterminateClassName,\n            state === \"partial\",\n        );\n    }\n\n    /**\n     * Sets the tab index for focusable elements.\n     * @private\n     */\n    _setInitialTabIndexes() {\n        const focusableElements = this._getFocusableElements();\n        if (!focusableElements.length) {\n            return;\n        }\n\n        focusableElements[0].tabIndex = 0;\n        focusableElements.slice(1).forEach((element) => {\n            element.tabIndex = -1;\n        });\n    }\n\n    /**\n     * Retrieves the focusable elements within the checkbox tree.\n     * @returns {HTMLElement[]} Array of focusable elements.\n     * @private\n     */\n    _getFocusableElements() {\n        const labels = this.$inner.querySelectorAll(\n            `.${this.options.optionLabelClassName}, .${this.options.groupLabelClassName}`,\n        );\n\n        return Array.from(labels).filter((label) => {\n            const input = label.querySelector(\n                `.${this.options.optionInputClassName}`,\n            );\n            return !input || !input.disabled;\n        });\n    }\n\n    /**\n     * Adds event listeners to the checkbox tree.\n     * @private\n     */\n    addEventListeners() {\n        // Add input event listener for checkbox state changes\n        this.$root.addEventListener(\"input\", (event) => {\n            const optionLabel = event.target.closest(\n                `.${this.options.optionLabelClassName}`,\n            );\n            if (optionLabel) {\n                const option = optionLabel.closest(\n                    `.${this.options.optionClassName}`,\n                );\n                if (option) {\n                    this.onClickOption(option);\n                }\n            }\n        });\n\n        // Add click event listener for group clicks\n        this.$root.addEventListener(\"click\", (event) => {\n            const groupLabel = event.target.closest(\n                `.${this.options.groupLabelClassName}`,\n            );\n            if (groupLabel) {\n                const group = groupLabel.closest(\n                    `.${this.options.groupClassName}`,\n                );\n                if (group) {\n                    this.onClickGroup(group);\n                }\n            }\n        });\n\n        // Add keypress event listener for Enter and Space keypresses\n        this.$root.addEventListener(\"keypress\", (event) => {\n            if ([13, 32].includes(event.keyCode)) {\n                const option = event.target.closest(\n                    `.${this.options.optionClassName}`,\n                );\n                if (option) {\n                    event.preventDefault();\n\n                    const input = option.querySelector(\n                        `.${this.options.optionInputClassName}`,\n                    );\n                    if (input && !input.disabled) {\n                        input.checked = !input.checked;\n                    }\n\n                    this.onClickOption(option);\n                    return;\n                }\n\n                const group = event.target.closest(\n                    `.${this.options.groupClassName}`,\n                );\n                if (group) {\n                    event.preventDefault();\n\n                    this.onClickGroup(group);\n                }\n            }\n        });\n\n        // Add pointerup event listener for tabindex handling\n        this.$root.addEventListener(\"pointerup\", (event) => {\n            const label = event.target.closest(\n                `.${this.options.optionLabelClassName}, .${this.options.groupLabelClassName}`,\n            );\n\n            if (label) {\n                const input = label.querySelector(\n                    `.${this.options.optionInputClassName}`,\n                );\n                if (input && input.disabled) {\n                    return\n                }\n\n                const focusableElements = this._getFocusableElements();\n                focusableElements.forEach((element) => {\n                    element.tabIndex = -1;\n                });\n\n                label.tabIndex = 0;\n                setTimeout(() => {\n                    label.focus();\n                });\n            }\n        });\n\n        // Add keydown event listener for arrow key navigation\n        this.$root.addEventListener(\"keydown\", (event) => {\n            if ([37, 38, 39, 40].includes(event.keyCode)) {\n                event.preventDefault();\n\n                const focusableElements = this._getFocusableElements();\n                const currentElementIndex = focusableElements.indexOf(\n                    event.target,\n                );\n\n                if ([37, 38].includes(event.keyCode)) {\n                    const previousElement =\n                        focusableElements[currentElementIndex - 1];\n                    if (previousElement) {\n                        focusableElements[currentElementIndex].tabIndex = -1;\n                        previousElement.tabIndex = 0;\n                        previousElement.focus();\n                    }\n                } else {\n                    const nextElement =\n                        focusableElements[currentElementIndex + 1];\n                    if (nextElement) {\n                        focusableElements[currentElementIndex].tabIndex = -1;\n                        nextElement.tabIndex = 0;\n                        nextElement.focus();\n                    }\n                }\n            }\n        });\n    }\n\n    /**\n     * Handles click events on option elements.\n     * @param {HTMLElement} option - The clicked option element.\n     */\n    onClickOption(option) {\n        this.updateOption(option);\n\n        const group = option.closest(`.${this.options.groupClassName}`);\n        if (group) {\n            this.updateGroup(group);\n        }\n    }\n\n    /**\n     * Handles click events on group elements.\n     * @param {HTMLElement} group - The clicked group element.\n     */\n    onClickGroup(group) {\n        const header = group.querySelector(\n            `.${this.options.groupHeaderClassName}`,\n        );\n        const groupIcon = header.querySelector(\"svg\");\n        const options = group.querySelectorAll(\n            `.${this.options.optionClassName}`,\n        );\n        const groupStates = this._getGroupStates(group);\n\n        if (groupStates.every((s) => s === 1)) {\n            options.forEach((option) => {\n                this.setOptionState(option, \"none\");\n            });\n            this.setIconState(groupIcon, \"none\");\n        } else {\n            options.forEach((option) => {\n                this.setOptionState(option, \"checked\");\n            });\n            this.setIconState(groupIcon, \"checked\");\n        }\n    }\n\n    /**\n     * Sets the state of an option element.\n     * @param {HTMLElement} option - The option element.\n     * @param {\"none\"|\"checked\"|\"partial\"} state - The state to set.\n     */\n    setOptionState(option, state) {\n        const input = option.querySelector(\n            `.${this.options.optionInputClassName}`,\n        );\n        if (input && !input.disabled) {\n            input.checked = state === \"checked\";\n            this.updateOption(option);\n        }\n    }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n    const selects = document.querySelectorAll(\"select.pct-tree\");\n    selects.forEach((select) => new CheckboxTree(select));\n});\n"]}