'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var _rollupPluginBabelHelpers = require('../_virtual/_rollupPluginBabelHelpers.js');
var React = require('react');

function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }

var React__default = /*#__PURE__*/_interopDefault(React);

// Для `default`-варианта `appearance` остается необязательным,
// а для остальных вариантов становится обязательным и привязанным к конкретному ключу.

// `ref` должен подходить любому компоненту из ConditionalMap, поэтому берем объединение всех вариантов.

/**
 * Утилита для создания компонента, который выбирает реализацию по `appearance`
 * и при этом сохраняет корректную типизацию пропсов и ref для каждого варианта.
 */
function createConditionalComponent(components) {
  return /*#__PURE__*/React.forwardRef(function (props, ref) {
    var appearance = props.appearance;

    // Если передан известный не-default вариант, рендерим его.
    // Во всех остальных случаях безопасно откатываемся к компоненту по умолчанию.
    var Current = appearance && appearance !== 'default' && appearance in components ? components[appearance] : components["default"];

    // После выбора конкретной реализации приводим тип,
    // чтобы корректно пробросить в него пропсы и `ref`.
    var C = Current;
    return /*#__PURE__*/React__default.default.createElement(C, _rollupPluginBabelHelpers.extends({}, props, {
      ref: ref
    }));
  });
}

exports.createConditionalComponent = createConditionalComponent;
