{"version":3,"file":"pfe-button.min.js","sources":["../_temp/pfe-button.js"],"sourcesContent":["/*!\n * PatternFly Elements: PfeButton 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\n// @IE11\n// watching for addition and removal of nodes so\n// we can make sure we have the correct light DOM\n// and so we can set the _externalBtn property\nconst parentObserverConfig = {\n childList: true,\n};\n\n// watching for changes on the _externalBtn so we can\n// update text in our shadow DOM when the _externalBtn\n// changes\nconst externalBtnObserverConfig = {\n characterData: true,\n attributes: true,\n subtree: true,\n childList: true,\n};\n\n// list of attributes that we DO NOT want to pass from\n// the _externalBtn to our shadow DOM button. For example,\n// the style attribute could ruin our encapsulated styles\n// in the shadow DOM\nconst denylistAttributes = [\"style\"];\n\nclass PfeButton 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 // Injected at build-time\n static get slots() {\n return {\"default\":{\"title\":\"Default slot\",\"type\":\"array\",\"namedSlot\":false,\"items\":{\"oneOf\":[{\"$ref\":\"button\"}]}}};\n }\n\n static get tag() {\n return \"pfe-button\";\n }\n\n get schemaUrl() {\n return \"pfe-button.json\";\n }\n\n get templateUrl() {\n return \"pfe-button.html\";\n }\n\n get styleUrl() {\n return \"pfe-button.scss\";\n }\n\n static get events() {\n return {\n click: `${this.tag}:click`,\n };\n }\n\n static get PfeType() {\n return PFElement.PfeTypes.Content;\n }\n\n static get properties() {\n return {\n variant: {\n title: \"Style variant\",\n type: String,\n values: [\"primary\", \"secondary\", \"tertiary\", \"danger\", \"control\"],\n },\n pfeVariant: {\n type: String,\n values: [\"primary\", \"secondary\", \"tertiary\", \"danger\", \"control\"],\n alias: \"variant\",\n },\n disabled: {\n title: \"Disabled\",\n type: Boolean,\n prefix: false,\n observer: \"_disabledChanged\",\n },\n size: {\n title: \"Size\",\n type: String,\n values: [\"medium\", \"large\"],\n },\n };\n }\n\n constructor() {\n super(PfeButton, { type: PfeButton.PfeType });\n\n this._init = this._init.bind(this);\n this._parentObserverHandler = this._parentObserverHandler.bind(this);\n this._clickHandler = this._clickHandler.bind(this);\n this._internalBtnContainer = this.shadowRoot.querySelector(\"#internalBtn\");\n this._observer = new MutationObserver(this._parentObserverHandler);\n this._externalBtnClickHandler = this._externalBtnClickHandler.bind(this);\n this._externalBtnObserver = new MutationObserver(this._init);\n\n this.addEventListener(\"click\", this._clickHandler);\n }\n\n get _externalBtn() {\n return this.querySelector(\"button\");\n }\n\n connectedCallback() {\n super.connectedCallback();\n\n if (this.hasLightDOM()) this._init();\n\n this._observer.observe(this, parentObserverConfig);\n\n if (this._externalBtn) {\n this._externalBtnObserver.observe(this._externalBtn, externalBtnObserverConfig);\n }\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n\n this.removeEventListener(\"click\", this._clickHandler);\n this._observer.disconnect();\n this._externalBtnObserver.disconnect();\n }\n\n _disabledChanged(oldVal, newVal) {\n if (!this._externalBtn) {\n return;\n }\n\n if (newVal) {\n this._externalBtn.setAttribute(\"disabled\", \"\");\n } else {\n this._externalBtn.removeAttribute(\"disabled\");\n }\n }\n\n _init() {\n if (!this._isValidLightDom()) {\n return;\n }\n\n if (!this._externalBtn) {\n return;\n }\n\n this._externalBtnObserver.disconnect();\n\n // If the external button has a disabled attribute\n if (this._externalBtn.hasAttribute(\"disabled\")) {\n // Set it on the wrapper too\n this.setAttribute(\"disabled\", \"\");\n }\n\n const clone = this._externalBtn.cloneNode(true);\n denylistAttributes.forEach((attribute) => {\n if (clone.hasAttribute) {\n clone.removeAttribute(attribute);\n }\n });\n\n this._internalBtnContainer.innerHTML = clone.outerHTML;\n this._externalBtnObserver.observe(this._externalBtn, externalBtnObserverConfig);\n\n this._externalBtn.addEventListener(\"click\", this._externalBtnClickHandler);\n }\n\n _isValidLightDom() {\n if (!this.hasLightDOM()) {\n this.warn(`You must have a button in the light DOM`);\n return false;\n }\n if (this.children[0].tagName !== \"BUTTON\") {\n this.warn(`The only child in the light DOM must be a button tag`);\n\n return false;\n }\n\n return true;\n }\n\n // when the parent changes, make sure the light DOM is valid,\n // initialize the component\n _parentObserverHandler() {\n if (!this._isValidLightDom()) {\n return;\n }\n\n this._init();\n }\n\n // programmatically clicking the _externalBtn is what makes\n // this web component button work in a form as you'd expect\n _clickHandler() {\n this._externalBtn.click();\n }\n\n _externalBtnClickHandler() {\n this.emitEvent(PfeButton.events.click);\n }\n}\n\nPFElement.create(PfeButton);\n\nexport default PfeButton;\n"],"names":["parentObserverConfig","childList","externalBtnObserverConfig","characterData","attributes","subtree","denylistAttributes","PfeButton","PFElement","version","html","slots","default","title","type","namedSlot","items","oneOf","$ref","tag","schemaUrl","templateUrl","styleUrl","events","click","this","PfeType","PfeTypes","Content","properties","variant","String","values","pfeVariant","alias","disabled","Boolean","prefix","observer","size","[object Object]","super","_init","bind","_parentObserverHandler","_clickHandler","_internalBtnContainer","shadowRoot","querySelector","_observer","MutationObserver","_externalBtnClickHandler","_externalBtnObserver","addEventListener","_externalBtn","connectedCallback","hasLightDOM","observe","disconnectedCallback","removeEventListener","disconnect","oldVal","newVal","setAttribute","removeAttribute","_isValidLightDom","hasAttribute","clone","cloneNode","forEach","attribute","innerHTML","outerHTML","children","tagName","warn","emitEvent","create"],"mappings":"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"}