_onCurrencyChanged({ currency }) {
    if (!this.__currencyDisplayNode) {
      return;
    }

    /** @type {AmountFormatOptions} */
    (this.formatOptions).currency = currency || undefined;
    if (currency) {
      if (!this.__currencyDisplayNodeIsConnected) {
        this.appendChild(this.__currencyDisplayNode);
        this.addToAriaLabelledBy(this.__currencyDisplayNode, {
          idPrefix: this._currencyDisplayNodeSlot,
        });
        this.__currencyDisplayNodeIsConnected = true;
      }
      this.__currencyDisplayNode.textContent = this.__currencyLabel;

      try {
        this._calculateValues({ source: null });
      } catch (e) {
        // In case Intl.NumberFormat gives error for invalid currency
        // we should catch, remove the node, and rethrow (since it's still a user error)
        if (e instanceof RangeError) {
          this.__currencyDisplayNode?.remove();
          this.__currencyDisplayNodeIsConnected = false;
        }
        throw e;
      }
      this.__setCurrencyDisplayLabel();
    } else {
      this.__currencyDisplayNode?.remove();
      this.__currencyDisplayNodeIsConnected = false;
    }
  }
@param {Object} opts
@param {string?} opts.currency
@protected