_defineOverlay({ contentNode, invokerNode, referenceNode, backdropNode, contentWrapperNode }) {
      const overlayConfig = this._defineOverlayConfig() || {};
      return new OverlayController({
        contentNode,
        invokerNode,
        referenceNode,
        backdropNode,
        contentWrapperNode,
        ...overlayConfig, // wc provided in the class as defaults
        ...this.config, // user provided (e.g. in template)
        popperConfig: {
          ...(overlayConfig.popperConfig || {}),
          ...(this.config?.popperConfig || {}),
          modifiers: [
            ...(overlayConfig.popperConfig?.modifiers || []),
            ...(this.config?.popperConfig?.modifiers || []),
          ],
        },
      });
    }
@overridable method `_defineOverlay`
@desc returns an instance of a (dynamic) overlay controller
In case overriding _defineOverlayConfig is not enough
@param {DefineOverlayConfig} config
@returns {OverlayController}
@protected