{"version":3,"file":"pfe-dropdown.min.js","sources":["../_temp/pfe-dropdown-item.js","../_temp/pfe-dropdown.js"],"sourcesContent":["/*!\n * PatternFly Elements: PfeDropdown 1.12.3\n * @license\n * Copyright 2021 Red Hat, Inc.\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n * \n*/\n\nimport PFElement from \"../../pfelement/dist/pfelement.js\";\n\nclass PfeDropdownItem extends PFElement {\n\n // Injected at build-time\n static get version() {\n return \"1.12.3\";\n }\n\n // Injected at build-time\n get html() {\n return `\n\n
  • \n \n
  • `;\n }\n\n // @TODO: Deprecating in 1.0 release\n // Injected at build-time\n static get schemaProperties() {\n return {\"item-type\":{\"title\":\"List item type\",\"type\":\"string\",\"enum\":[\"link\",\"action\",\"separator\"],\"default\":null,\"prefixed\":true}};\n }\n\n static get tag() {\n return \"pfe-dropdown-item\";\n }\n\n get templateUrl() {\n return \"pfe-dropdown-item.html\";\n }\n\n get styleUrl() {\n return \"pfe-dropdown-item.scss\";\n }\n\n get schemaUrl() {\n return \"pfe-dropdown-item.json\";\n }\n\n static get properties() {\n return {\n itemType: {\n title: \"List item type\",\n type: String,\n values: [\"link\", \"action\", \"separator\"],\n observer: \"_itemTypeChanged\",\n },\n oldItemType: {\n alias: \"itemType\",\n attr: \"pfe-item-type\",\n },\n disabled: {\n title: \"Disabled item\",\n type: Boolean,\n observer: \"_disabledChanged\",\n },\n oldDisabled: {\n alias: \"disabled\",\n attr: \"is_disabled\",\n },\n };\n }\n\n constructor() {\n super(PfeDropdownItem);\n\n this._container = this.shadowRoot.querySelector(`.${this.tag}__container`);\n this._item = this.shadowRoot.querySelector(\"slot\").assignedNodes()[1];\n }\n\n connectedCallback() {\n super.connectedCallback();\n }\n\n _itemTypeChanged() {\n this._setAccessibility();\n }\n\n _disabledChanged() {\n this._setDisabled();\n }\n\n _setAccessibility() {\n if (this._container) {\n const type = this.itemType;\n if (type) {\n switch (type) {\n case \"link\":\n this._container.setAttribute(\"role\", \"none\");\n this._item && this._item.setAttribute(\"role\", \"menuitem\");\n break;\n case \"action\":\n this._container.setAttribute(\"role\", \"menuitem\");\n this._item && this._item.removeAttribute(\"role\");\n break;\n case \"separator\":\n this._container.setAttribute(\"role\", \"separator\");\n break;\n default:\n break;\n }\n }\n }\n }\n\n _setDisabled() {\n const isDisabled = this.disabled;\n if (isDisabled) {\n this.removeAttribute(\"tabindex\");\n this.setAttribute(\"aria-disabled\", \"true\");\n } else {\n this.disabled = false;\n this.setAttribute(\"tabindex\", \"0\");\n this.setAttribute(\"aria-disabled\", \"false\");\n }\n }\n}\n\nexport default PfeDropdownItem;\n","/*!\n * PatternFly Elements: PfeDropdown 1.12.3\n * @license\n * Copyright 2021 Red Hat, Inc.\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n * \n*/\n\nimport PFElement from \"../../pfelement/dist/pfelement.js\";\nimport PfeDropdownItem from \"./pfe-dropdown-item.js\";\n\n// @POLYFILL Element.closest\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\nif (!Element.prototype.closest) {\n Element.prototype.closest = function (s) {\n var el = this;\n do {\n if (el.matches(s)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n };\n}\n\n// @POLYFILL Element.matches\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\nif (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n}\n\nconst KEYCODE = {\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESC: 27,\n HOME: 36,\n LEFT: 37,\n RIGHT: 39,\n SPACE: 0 || 32,\n UP: 38,\n TAB: 9,\n};\n\nclass PfeDropdown extends PFElement {\n\n // Injected at build-time\n static get version() {\n return \"1.12.3\";\n }\n\n // Injected at build-time\n get html() {\n return `\n\n
    \n \n \n \n \n
    `;\n }\n\n // @TODO: Deprecating in 1.0 release\n // Injected at build-time\n static get schemaProperties() {\n return {\"label\":{\"title\":\"Menu button label\",\"type\":\"string\",\"default\":\"Dropdown\",\"prefixed\":true},\"is_disabled\":{\"title\":\"Disable menu button\",\"type\":\"boolean\",\"default\":false,\"prefixed\":false}};\n }\n\n static get tag() {\n return \"pfe-dropdown\";\n }\n\n get templateUrl() {\n return \"pfe-dropdown.html\";\n }\n\n get styleUrl() {\n return \"pfe-dropdown.scss\";\n }\n\n get schemaUrl() {\n return \"pfe-dropdown.json\";\n }\n\n static get properties() {\n return {\n label: {\n title: \"Menu button label\",\n type: String,\n default: \"Dropdown\",\n observer: \"_labelChanged\",\n },\n oldLabel: {\n alias: \"label\",\n attr: \"pfe-label\",\n },\n disabled: {\n title: \"Disable menu button\",\n type: Boolean,\n default: false,\n observer: \"_disabledChanged\",\n },\n oldDisabled: {\n alias: \"disabled\",\n attr: \"is_disabled\",\n },\n };\n }\n\n set pfeDropdownOptions(options) {\n this._modifyDOM(options);\n }\n\n static get events() {\n return {\n change: `${this.tag}:change`,\n };\n }\n\n constructor() {\n super(PfeDropdown);\n\n // state\n this.isOpen = false;\n\n this._init = this._init.bind(this);\n\n // elements\n this._container = this.shadowRoot.querySelector(`#${this.tag}-container`);\n this._toggle = this.shadowRoot.querySelector(`#${this.tag}-toggle`);\n this._toggle_text = this._toggle.querySelector(`.${this.tag}__toggle-text`);\n this._menu = this.shadowRoot.querySelector(`#${this.tag}-menu`);\n\n // events\n this.open = this.open.bind(this);\n this.close = this.close.bind(this);\n\n this._clickHandler = this._clickHandler.bind(this);\n this._toggleKeydownHandler = this._toggleKeydownHandler.bind(this);\n this._itemKeydownHandler = this._itemKeydownHandler.bind(this);\n this._itemClickHandler = this._itemClickHandler.bind(this);\n this._outsideClickHandler = this._outsideClickHandler.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener(\"click\", this._outsideClickHandler);\n Promise.all([customElements.whenDefined(PfeDropdown.tag), customElements.whenDefined(PfeDropdownItem.tag)]).then(\n () => {\n if (this.hasLightDOM()) {\n this._init();\n }\n }\n );\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n this._toggle.removeEventListener(\"click\", this._clickHandler);\n this._toggle.removeEventListener(\"keydown\", this._toggleKeydownHandler);\n this._allItems().forEach((item) => {\n item.removeEventListener(\"keydown\", this._itemKeydownHandler);\n item.removeEventListener(\"click\", this._itemClickHandler);\n });\n }\n\n _labelChanged(oldVal, newVal) {\n this._toggle_text.textContent = newVal;\n }\n\n _disabledChanged() {\n this._setDisabled();\n }\n\n _init() {\n if (!this.disabled) {\n this._toggle.addEventListener(\"click\", this._clickHandler);\n this._toggle.addEventListener(\"keydown\", this._toggleKeydownHandler);\n this._allItems().forEach((item) => {\n item.addEventListener(\"keydown\", this._itemKeydownHandler);\n item.addEventListener(\"click\", this._itemClickHandler);\n });\n }\n }\n\n // Event handler for click event on Dropdown button\n _clickHandler(event) {\n this.isOpen ? this.close(event) : this.open(event);\n return this;\n }\n\n // Event handler for click event on Dropdown Item\n _itemClickHandler(event) {\n let pfeType;\n if (event.target.parentElement.attributes[\"item-type\"]) {\n pfeType = event.target.parentElement.attributes[\"item-type\"].value;\n }\n this._selectItem(event.target, pfeType);\n return this;\n }\n\n // Event handler for keydown events on Dropdown Menu\n _itemKeydownHandler(event) {\n let newItem;\n let pfeType;\n if (event.target.attributes[\"item-type\"]) {\n pfeType = event.target.attributes[\"item-type\"].value;\n }\n // active dropdown item index\n const currentIndex = this._allItems().findIndex((item) => item === document.activeElement);\n switch (event.keyCode) {\n case KEYCODE.ENTER:\n this._selectItem(event.target.children[0], pfeType);\n break;\n case KEYCODE.ESC:\n this.close(event);\n break;\n case KEYCODE.RIGHT:\n case KEYCODE.DOWN:\n // get the following item\n newItem = this._itemContainer(this._nextItem(currentIndex, 1));\n break;\n case KEYCODE.LEFT:\n case KEYCODE.UP:\n // get the previous item\n newItem = this._itemContainer(this._nextItem(currentIndex, -1));\n break;\n case KEYCODE.HOME:\n newItem = this._firstItem();\n break;\n case KEYCODE.END:\n newItem = this._lastItem();\n break;\n case KEYCODE.TAB:\n this.close();\n break;\n default:\n break;\n }\n if (newItem) {\n newItem.setAttribute(\"tabindex\", \"-1\");\n newItem.focus();\n }\n return this;\n }\n\n // Event handler for click event outside the Dropdown element\n _outsideClickHandler(event) {\n // Check if the clicked element is the dropdown object\n let isSelf = event.target === this;\n // Check if the clicked element contains or is contained by the dropdown element\n let isChild = event.target.closest(\"pfe-dropdown\");\n let insideWrapper =\n event.target.tagName.indexOf(\"-\") > -1 ? event.target.shadowRoot.querySelector(\"pfe-dropdown\") : null;\n // Check states to determine if the dropdown menu should close\n if (!isSelf && !(isChild || insideWrapper)) {\n this.close();\n }\n }\n\n // Event handler for keydown event on Dropdown\n _toggleKeydownHandler(event) {\n switch (event.keyCode) {\n case KEYCODE.ENTER:\n case KEYCODE.DOWN:\n if (this._allDisabled()) {\n // toggle the dropdown if all items disabled\n this.toggle(event);\n } else {\n // otherwise, get the next enabled item\n this.open();\n const item = this._itemContainer(this._nextItem(-1, 1));\n item.setAttribute(\"tabindex\", \"-1\");\n item.focus();\n }\n break;\n case KEYCODE.TAB:\n this.close();\n break;\n default:\n break;\n }\n return this;\n }\n\n // modify DOM if custom options are passed in an array\n _modifyDOM(options) {\n options.forEach((el) => {\n let item;\n switch (el.type) {\n case \"link\":\n item = document.createElement(\"a\");\n item.setAttribute(\"href\", el.href ? el.href : \"#\");\n break;\n case \"action\":\n item = document.createElement(\"button\");\n break;\n default:\n break;\n }\n const option = document.createElement(\"pfe-dropdown-item\");\n option.setAttribute(\"item-type\", el.type);\n if (el.is_disabled || el.disabled) {\n // @TODO: Deprecated el.is_disabled\n option.disabled = true;\n }\n if (item) {\n item.innerText = el.text ? el.text : \"\";\n option.appendChild(item);\n }\n this.appendChild(option);\n });\n }\n\n _setDisabled() {\n const isDisabled = this.disabled;\n if (isDisabled) {\n this.setAttribute(\"aria-disabled\", \"true\");\n this.setAttribute(\"tabindex\", \"-1\");\n } else {\n this.disabled = false;\n this.setAttribute(\"aria-disabled\", \"false\");\n this.removeAttribute(\"tabindex\");\n }\n }\n\n _allItems() {\n return [...this.querySelectorAll(`${this.tag}-item:not([item-type='separator'])`)];\n }\n\n _allDisabled() {\n return this._allItems().find((item) => !item.disabled) === undefined;\n }\n\n _nextItem(currentPosition, direction) {\n const items = this._allItems();\n let index = (currentPosition + direction) % items.length;\n index = index < 0 ? index + items.length : index;\n let item = items[index];\n while (item && item.hasAttribute(\"is_disabled\")) {\n index += direction;\n item = items[index % items.length];\n }\n return item;\n }\n\n _firstItem() {\n const items = this._allItems();\n return items[0];\n }\n\n _lastItem() {\n const items = this._allItems();\n return items[items.length - 1];\n }\n\n _selectItem(item, type) {\n if (type === \"action\") {\n this.emitEvent(PfeDropdown.events.change, {\n detail: { action: item.innerText },\n });\n this.close(event);\n } else {\n item.click();\n }\n }\n\n addDropdownOptions(options) {\n this._modifyDOM(options);\n }\n\n open(event) {\n if (event) {\n event.preventDefault();\n }\n this.isOpen = true;\n this._menu.classList.add(\"open\");\n this._toggle.setAttribute(\"aria-expanded\", true);\n return this;\n }\n\n close(event) {\n if (event) {\n event.preventDefault();\n }\n this.isOpen = false;\n this._menu.classList.remove(\"open\");\n this._toggle.setAttribute(\"aria-expanded\", false);\n return this;\n }\n\n toggle(event) {\n this.isOpen ? this.close(event) : this.open(event);\n }\n\n _itemContainer(item) {\n // used to apply the focus state to the item's container\n return item.shadowRoot.querySelector(`.${this.tag}-item__container`);\n }\n}\n\nPFElement.create(PfeDropdownItem);\nPFElement.create(PfeDropdown);\n\nexport default PfeDropdown;\n"],"names":["PfeDropdownItem","PFElement","version","html","schemaProperties","item-type","title","type","enum","default","prefixed","tag","templateUrl","styleUrl","schemaUrl","properties","itemType","String","values","observer","oldItemType","alias","attr","disabled","Boolean","oldDisabled","[object Object]","super","this","_container","shadowRoot","querySelector","_item","assignedNodes","connectedCallback","_setAccessibility","_setDisabled","setAttribute","removeAttribute","Element","prototype","closest","s","el","matches","parentElement","parentNode","nodeType","msMatchesSelector","webkitMatchesSelector","KEYCODE","PfeDropdown","label","is_disabled","oldLabel","pfeDropdownOptions","options","_modifyDOM","events","change","isOpen","_init","bind","_toggle","_toggle_text","_menu","open","close","_clickHandler","_toggleKeydownHandler","_itemKeydownHandler","_itemClickHandler","_outsideClickHandler","document","addEventListener","Promise","all","customElements","whenDefined","then","hasLightDOM","disconnectedCallback","removeEventListener","_allItems","forEach","item","oldVal","newVal","textContent","event","pfeType","target","attributes","value","_selectItem","newItem","currentIndex","findIndex","activeElement","keyCode","children","_itemContainer","_nextItem","_firstItem","_lastItem","focus","isSelf","isChild","insideWrapper","tagName","indexOf","_allDisabled","toggle","createElement","href","option","innerText","text","appendChild","querySelectorAll","undefined","find","currentPosition","direction","items","index","length","hasAttribute","emitEvent","detail","action","click","preventDefault","classList","add","remove","create"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EA2BA,MAAMA,UAAwBC,EAG5BC,qBACE,MAAO,SAITC,WACE,MAAO,uvDASTC,8BACE,MAAO,CAACC,YAAY,CAACC,MAAQ,iBAAiBC,KAAO,SAASC,KAAO,CAAC,OAAO,SAAS,aAAaC,QAAU,KAAKC,UAAW,IAG/HC,iBACE,MAAO,oBAGTC,kBACE,MAAO,yBAGTC,eACE,MAAO,yBAGTC,gBACE,MAAO,yBAGTC,wBACE,MAAO,CACLC,SAAU,CACRV,MAAO,iBACPC,KAAMU,OACNC,OAAQ,CAAC,OAAQ,SAAU,aAC3BC,SAAU,oBAEZC,YAAa,CACXC,MAAO,WACPC,KAAM,iBAERC,SAAU,CACRjB,MAAO,gBACPC,KAAMiB,QACNL,SAAU,oBAEZM,YAAa,CACXJ,MAAO,WACPC,KAAM,gBAKZI,cACEC,MAAM3B,GAEN4B,KAAKC,WAAaD,KAAKE,WAAWC,cAAc,IAAIH,KAAKjB,kBACzDiB,KAAKI,MAAQJ,KAAKE,WAAWC,cAAc,QAAQE,gBAAgB,GAGrEP,oBACEC,MAAMO,oBAGRR,mBACEE,KAAKO,oBAGPT,mBACEE,KAAKQ,eAGPV,oBACE,GAAIE,KAAKC,WAAY,CACnB,MAAMtB,EAAOqB,KAAKZ,SAClB,GAAIT,EACF,OAAQA,GACN,IAAK,OACHqB,KAAKC,WAAWQ,aAAa,OAAQ,QACrCT,KAAKI,OAASJ,KAAKI,MAAMK,aAAa,OAAQ,YAC9C,MACF,IAAK,SACHT,KAAKC,WAAWQ,aAAa,OAAQ,YACrCT,KAAKI,OAASJ,KAAKI,MAAMM,gBAAgB,QACzC,MACF,IAAK,YACHV,KAAKC,WAAWQ,aAAa,OAAQ,eAS/CX,eACqBE,KAAKL,UAEtBK,KAAKU,gBAAgB,YACrBV,KAAKS,aAAa,gBAAiB,UAEnCT,KAAKL,UAAW,EAChBK,KAAKS,aAAa,WAAY,KAC9BT,KAAKS,aAAa,gBAAiB;;;;;;;;;;;;;;;;;;;;;;;;EC7GpCE,QAAQC,UAAUC,UACrBF,QAAQC,UAAUC,QAAU,SAAUC,GACpC,IAAIC,EAAKf,KACT,EAAG,CACD,GAAIe,EAAGC,QAAQF,GAAI,OAAOC,EAC1BA,EAAKA,EAAGE,eAAiBF,EAAGG,iBACd,OAAPH,GAA+B,IAAhBA,EAAGI,UAC3B,OAAO,OAMNR,QAAQC,UAAUI,UACrBL,QAAQC,UAAUI,QAAUL,QAAQC,UAAUQ,mBAAqBT,QAAQC,UAAUS,uBAGvF,MAAMC,EACE,GADFA,EAEC,GAFDA,EAGG,GAHHA,EAIC,GAJDA,EAKE,GALFA,EAME,GANFA,EAOG,GAPHA,EASA,GATAA,EAUC,EAGP,MAAMC,UAAoBlD,EAGxBC,qBACE,MAAO,SAITC,WACE,MAAO,mwMAsBTC,8BACE,MAAO,CAACgD,MAAQ,CAAC9C,MAAQ,oBAAoBC,KAAO,SAASE,QAAU,WAAWC,UAAW,GAAM2C,YAAc,CAAC/C,MAAQ,sBAAsBC,KAAO,UAAUE,SAAU,EAAMC,UAAW,IAG9LC,iBACE,MAAO,eAGTC,kBACE,MAAO,oBAGTC,eACE,MAAO,oBAGTC,gBACE,MAAO,oBAGTC,wBACE,MAAO,CACLqC,MAAO,CACL9C,MAAO,oBACPC,KAAMU,OACNR,QAAS,WACTU,SAAU,iBAEZmC,SAAU,CACRjC,MAAO,QACPC,KAAM,aAERC,SAAU,CACRjB,MAAO,sBACPC,KAAMiB,QACNf,SAAS,EACTU,SAAU,oBAEZM,YAAa,CACXJ,MAAO,WACPC,KAAM,gBAKZiC,uBAAuBC,GACrB5B,KAAK6B,WAAWD,GAGlBE,oBACE,MAAO,CACLC,OAAW/B,KAAKjB,IAAR,WAIZe,cACEC,MAAMwB,GAGNvB,KAAKgC,QAAS,EAEdhC,KAAKiC,MAAQjC,KAAKiC,MAAMC,KAAKlC,MAG7BA,KAAKC,WAAaD,KAAKE,WAAWC,cAAc,IAAIH,KAAKjB,iBACzDiB,KAAKmC,QAAUnC,KAAKE,WAAWC,cAAc,IAAIH,KAAKjB,cACtDiB,KAAKoC,aAAepC,KAAKmC,QAAQhC,cAAc,IAAIH,KAAKjB,oBACxDiB,KAAKqC,MAAQrC,KAAKE,WAAWC,cAAc,IAAIH,KAAKjB,YAGpDiB,KAAKsC,KAAOtC,KAAKsC,KAAKJ,KAAKlC,MAC3BA,KAAKuC,MAAQvC,KAAKuC,MAAML,KAAKlC,MAE7BA,KAAKwC,cAAgBxC,KAAKwC,cAAcN,KAAKlC,MAC7CA,KAAKyC,sBAAwBzC,KAAKyC,sBAAsBP,KAAKlC,MAC7DA,KAAK0C,oBAAsB1C,KAAK0C,oBAAoBR,KAAKlC,MACzDA,KAAK2C,kBAAoB3C,KAAK2C,kBAAkBT,KAAKlC,MACrDA,KAAK4C,qBAAuB5C,KAAK4C,qBAAqBV,KAAKlC,MAG7DF,oBACEC,MAAMO,oBACNuC,SAASC,iBAAiB,QAAS9C,KAAK4C,sBACxCG,QAAQC,IAAI,CAACC,eAAeC,YAAY3B,EAAYxC,KAAMkE,eAAeC,YAAY9E,EAAgBW,OAAOoE,KAC1G,KACMnD,KAAKoD,eACPpD,KAAKiC,UAMbnC,uBACEC,MAAMsD,uBAENrD,KAAKmC,QAAQmB,oBAAoB,QAAStD,KAAKwC,eAC/CxC,KAAKmC,QAAQmB,oBAAoB,UAAWtD,KAAKyC,uBACjDzC,KAAKuD,YAAYC,QAASC,IACxBA,EAAKH,oBAAoB,UAAWtD,KAAK0C,qBACzCe,EAAKH,oBAAoB,QAAStD,KAAK2C,qBAI3C7C,cAAc4D,EAAQC,GACpB3D,KAAKoC,aAAawB,YAAcD,EAGlC7D,mBACEE,KAAKQ,eAGPV,QACOE,KAAKL,WACRK,KAAKmC,QAAQW,iBAAiB,QAAS9C,KAAKwC,eAC5CxC,KAAKmC,QAAQW,iBAAiB,UAAW9C,KAAKyC,uBAC9CzC,KAAKuD,YAAYC,QAASC,IACxBA,EAAKX,iBAAiB,UAAW9C,KAAK0C,qBACtCe,EAAKX,iBAAiB,QAAS9C,KAAK2C,sBAM1C7C,cAAc+D,GAEZ,OADA7D,KAAKgC,OAAShC,KAAKuC,MAAMsB,GAAS7D,KAAKsC,KAAKuB,GACrC7D,KAITF,kBAAkB+D,GAChB,IAAIC,EAKJ,OAJID,EAAME,OAAO9C,cAAc+C,WAAW,eACxCF,EAAUD,EAAME,OAAO9C,cAAc+C,WAAW,aAAaC,OAE/DjE,KAAKkE,YAAYL,EAAME,OAAQD,GACxB9D,KAITF,oBAAoB+D,GAClB,IAAIM,EACAL,EACAD,EAAME,OAAOC,WAAW,eAC1BF,EAAUD,EAAME,OAAOC,WAAW,aAAaC,OAGjD,MAAMG,EAAepE,KAAKuD,YAAYc,UAAWZ,GAASA,IAASZ,SAASyB,eAC5E,OAAQT,EAAMU,SACZ,KAAKjD,EACHtB,KAAKkE,YAAYL,EAAME,OAAOS,SAAS,GAAIV,GAC3C,MACF,KAAKxC,EACHtB,KAAKuC,MAAMsB,GACX,MACF,KAAKvC,EACL,KAAKA,EAEH6C,EAAUnE,KAAKyE,eAAezE,KAAK0E,UAAUN,EAAc,IAC3D,MACF,KAAK9C,EACL,KAAKA,EAEH6C,EAAUnE,KAAKyE,eAAezE,KAAK0E,UAAUN,GAAe,IAC5D,MACF,KAAK9C,EACH6C,EAAUnE,KAAK2E,aACf,MACF,KAAKrD,EACH6C,EAAUnE,KAAK4E,YACf,MACF,KAAKtD,EACHtB,KAAKuC,QAST,OAJI4B,IACFA,EAAQ1D,aAAa,WAAY,MACjC0D,EAAQU,SAEH7E,KAITF,qBAAqB+D,GAEnB,IAAIiB,EAASjB,EAAME,SAAW/D,KAE1B+E,EAAUlB,EAAME,OAAOlD,QAAQ,gBAC/BmE,EACFnB,EAAME,OAAOkB,QAAQC,QAAQ,MAAQ,EAAIrB,EAAME,OAAO7D,WAAWC,cAAc,gBAAkB,KAE9F2E,GAAYC,GAAWC,GAC1BhF,KAAKuC,QAKTzC,sBAAsB+D,GACpB,OAAQA,EAAMU,SACZ,KAAKjD,EACL,KAAKA,EACH,GAAItB,KAAKmF,eAEPnF,KAAKoF,OAAOvB,OACP,CAEL7D,KAAKsC,OACL,MAAMmB,EAAOzD,KAAKyE,eAAezE,KAAK0E,WAAW,EAAG,IACpDjB,EAAKhD,aAAa,WAAY,MAC9BgD,EAAKoB,QAEP,MACF,KAAKvD,EACHtB,KAAKuC,QAKT,OAAOvC,KAITF,WAAW8B,GACTA,EAAQ4B,QAASzC,IACf,IAAI0C,EACJ,OAAQ1C,EAAGpC,MACT,IAAK,OACH8E,EAAOZ,SAASwC,cAAc,KAC9B5B,EAAKhD,aAAa,OAAQM,EAAGuE,KAAOvE,EAAGuE,KAAO,KAC9C,MACF,IAAK,SACH7B,EAAOZ,SAASwC,cAAc,UAKlC,MAAME,EAAS1C,SAASwC,cAAc,qBACtCE,EAAO9E,aAAa,YAAaM,EAAGpC,OAChCoC,EAAGU,aAAeV,EAAGpB,YAEvB4F,EAAO5F,UAAW,GAEhB8D,IACFA,EAAK+B,UAAYzE,EAAG0E,KAAO1E,EAAG0E,KAAO,GACrCF,EAAOG,YAAYjC,IAErBzD,KAAK0F,YAAYH,KAIrBzF,eACqBE,KAAKL,UAEtBK,KAAKS,aAAa,gBAAiB,QACnCT,KAAKS,aAAa,WAAY,QAE9BT,KAAKL,UAAW,EAChBK,KAAKS,aAAa,gBAAiB,SACnCT,KAAKU,gBAAgB,aAIzBZ,YACE,MAAO,IAAIE,KAAK2F,iBAAoB3F,KAAKjB,IAAR,uCAGnCe,eACE,YAA2D8F,IAApD5F,KAAKuD,YAAYsC,KAAMpC,IAAUA,EAAK9D,UAG/CG,UAAUgG,EAAiBC,GACzB,MAAMC,EAAQhG,KAAKuD,YACnB,IAAI0C,GAASH,EAAkBC,GAAaC,EAAME,OAClDD,EAAQA,EAAQ,EAAIA,EAAQD,EAAME,OAASD,EAC3C,IAAIxC,EAAOuC,EAAMC,GACjB,KAAOxC,GAAQA,EAAK0C,aAAa,gBAC/BF,GAASF,EACTtC,EAAOuC,EAAMC,EAAQD,EAAME,QAE7B,OAAOzC,EAGT3D,aAEE,OADcE,KAAKuD,YACN,GAGfzD,YACE,MAAMkG,EAAQhG,KAAKuD,YACnB,OAAOyC,EAAMA,EAAME,OAAS,GAG9BpG,YAAY2D,EAAM9E,GACH,WAATA,GACFqB,KAAKoG,UAAU7E,EAAYO,OAAOC,OAAQ,CACxCsE,OAAQ,CAAEC,OAAQ7C,EAAK+B,aAEzBxF,KAAKuC,MAAMsB,QAEXJ,EAAK8C,QAITzG,mBAAmB8B,GACjB5B,KAAK6B,WAAWD,GAGlB9B,KAAK+D,GAOH,OANIA,GACFA,EAAM2C,iBAERxG,KAAKgC,QAAS,EACdhC,KAAKqC,MAAMoE,UAAUC,IAAI,QACzB1G,KAAKmC,QAAQ1B,aAAa,iBAAiB,GACpCT,KAGTF,MAAM+D,GAOJ,OANIA,GACFA,EAAM2C,iBAERxG,KAAKgC,QAAS,EACdhC,KAAKqC,MAAMoE,UAAUE,OAAO,QAC5B3G,KAAKmC,QAAQ1B,aAAa,iBAAiB,GACpCT,KAGTF,OAAO+D,GACL7D,KAAKgC,OAAShC,KAAKuC,MAAMsB,GAAS7D,KAAKsC,KAAKuB,GAG9C/D,eAAe2D,GAEb,OAAOA,EAAKvD,WAAWC,cAAc,IAAIH,KAAKjB,wBAIlDV,EAAUuI,OAAOxI,GACjBC,EAAUuI,OAAOrF"}