import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
var _excluded = ["breakpoints", "spacers", "spaces", "typography"];

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }

import createMaterialTheme from "./createMaterialTheme";
import createBreakpoints from "./createBreakpoints";
import createSpacesLegacy from "./createSpacesLegacy";
import createSpaces from "./createSpaces";
import createTypography from "./createTypography";

var createTheme = function createTheme(inputTheme) {
  var breakpointsInput = inputTheme.breakpoints,
      legacySpacersInput = inputTheme.spacers,
      spacesInput = inputTheme.spaces,
      typographyInput = inputTheme.typography,
      others = _objectWithoutProperties(inputTheme, _excluded);

  var breakpoints = createBreakpoints(breakpointsInput);
  var spacing = createSpacesLegacy(legacySpacersInput);
  var spaces = createSpaces(spacesInput);
  var typography = createTypography({
    typography: typographyInput,
    breakpoints: breakpoints
  });

  var theme = _objectSpread({
    breakpoints: breakpoints,
    spacing: spacing,
    spaces: spaces,
    typography: typography
  }, others);

  var materialTheme = createMaterialTheme(theme);
  return _objectSpread({
    cleverUI: theme
  }, materialTheme);
};

export default createTheme;