attributeChangedCallback(name, oldValue, newValue) {
        if (!this.shadow) {
            return;
        }
        const span = this.shadow.querySelector('.winner');

        if (name === 'type') {
            this.shadow.removeChild(span);
            this.addWinnerText();
        }
    }
/**
     * This function is called whenever an attribute we are observing
     * is updated.  We specify which attributes we want to observe
     * in `observedAttributes`
     * 
     * @param {String} name attribute name (i.e. 'type' or 'command')
     * @param {String} oldValue the previous value
     * @param {String} newValue the new value we want
     */
This function is called whenever an attribute we are observing
is updated.  We specify which attributes we want to observe
in `observedAttributes`

@param {String} name attribute name
@param {String} oldValue the previous value
@param {String} newValue the new value we want
This function is called whenever an attribute we are observing is updated . We specify which attributes we want to observe in ` observedAttributes ` @param { String } name attribute name @param { String } oldValue the previous value @param { String } newValue the new value we want
attributeChangedCallback(name, oldValue, newValue) {
        if (!this.shadow) {
            return;
        }
        const span = this.shadow.querySelector('.winner');
        if (name === 'type') {
            this.shadow.removeChild(span);
            this.addWinnerText();
        }
    }
attributeChangedCallback ( name , oldValue , newValue ) { if ( ! this . shadow ) { return ; } const span = this . shadow . querySelector ( '.winner' ) ; if ( name === 'type' ) { this . shadow . removeChild ( span ) ; this . addWinnerText ( ) ; } }
This function is called whenever an attribute we are observing
 is updated.
This function is called whenever an attribute we are observing is updated .