import { objectSpread2 as _objectSpread2, extends as _extends, defineProperty as _defineProperty } from '../_virtual/_rollupPluginBabelHelpers.js';
import React__default from 'react';
import { _component } from './linaria.js';

var mergeConfig = function mergeConfig(baseConfig, userConfig) {
  var res = _objectSpread2(_objectSpread2({}, baseConfig), userConfig);
  if (res.variations) {
    // copy variations base css
    // eslint-disable-next-line guard-for-in
    for (var key in res.variations) {
      var variant = baseConfig.variations[key];
      res.variations[key].css = variant === null || variant === void 0 ? void 0 : variant.css;
      /* start of bad decision */
      if (!res.variations[key]["true"] && variant !== null && variant !== void 0 && variant["true"]) {
        res.variations[key]["true"] = variant["true"];
      }
      /* end of bad decision */
      if (variant !== null && variant !== void 0 && variant.attrs) {
        res.variations[key].attrs = variant.attrs;
      }
    }
  }

  // eslint-disable-next-line guard-for-in
  for (var _key in baseConfig.defaults || {}) {
    if (!(_key in res.defaults)) {
      res.defaults[_key] = baseConfig.defaults[_key];
    }
  }
  return res;
};

// INFO: Метод, который проводит слияние двух объектов
// INFO: если значение явно указанно как undefined/null/пустая строка, то будет взято значение указанное в default
function mergeWithoutNullable(defaults, componentProps) {
  var props = Object.keys(defaults).reduce(function (acc, key) {
    return _objectSpread2(_objectSpread2({}, acc), {}, _defineProperty({}, key, [null, undefined, ''].includes(componentProps[key]) ? defaults[key] : componentProps[key]));
  }, {});
  return _objectSpread2(_objectSpread2({}, componentProps), props);
}
function component(config) {
  var Comp = config.layout(_component(config));
  return /*#__PURE__*/React__default.forwardRef(function (props, ref) {
    var mergedProps = mergeWithoutNullable(config === null || config === void 0 ? void 0 : config.defaults, props);
    return /*#__PURE__*/React__default.createElement(Comp, _extends({}, mergedProps, {
      ref: ref
    }));
  });
}

export { component, mergeConfig };
