import { objectWithoutProperties as _objectWithoutProperties, extends as _extends, objectSpread2 as _objectSpread2 } from '../../_virtual/_rollupPluginBabelHelpers.js';
import React__default, { forwardRef } from 'react';
import { applySpacing } from '../../mixins/applySpacing.js';
import { cx } from '../../utils/index.js';
import { classes } from './tokens.js';

var _excluded = ["size", "children", "breakWord", "noWrap", "medium", "bold", "extraBold", "color", "isNumeric", "isItalic", "className", "style"];
var typographyRootCompose = function typographyRootCompose(defaultArgs) {
  return function (Root) {
    return /*#__PURE__*/forwardRef(function (props, ref) {
      var size = props.size,
        children = props.children,
        breakWord = props.breakWord,
        noWrap = props.noWrap,
        medium = props.medium,
        _props$bold = props.bold,
        bold = _props$bold === void 0 ? defaultArgs === null || defaultArgs === void 0 ? void 0 : defaultArgs.defaultBold : _props$bold,
        extraBold = props.extraBold,
        color = props.color,
        isNumeric = props.isNumeric,
        isItalic = props.isItalic,
        className = props.className,
        style = props.style,
        rest = _objectWithoutProperties(props, _excluded);

      // TODO: Временное решение. Основное решение будет основано на указание тега по-умолчанию в конфигурации
      // TODO: компонента и сбросе стилей по-умолчанию для тега
      var isHeading = (defaultArgs === null || defaultArgs === void 0 ? void 0 : defaultArgs.type) === 'heading';
      var ariaHeadingLevel = isHeading ? size === null || size === void 0 ? void 0 : size.split('')[1] : null;

      // Порядок определяет приоритет: extraBold и medium перебивают дефолтный bold
      // TODO: Нужно менять поведение, не должен быть bold по-умолчанию
      var fontWeightClass = [extraBold && classes.typoExtraBold, medium && classes.typoMedium, bold && classes.typoBold].find(Boolean);
      return /*#__PURE__*/React__default.createElement(Root, _extends({
        size: size,
        ref: ref,
        className: cx(noWrap && classes.typoWithNoWrap, breakWord && classes.typoWithBreakWord, fontWeightClass, isNumeric && classes.typoIsNumeric, isItalic && classes.typoIsItalic, className),
        style: _objectSpread2(_objectSpread2({
          color: color
        }, style), applySpacing(rest)),
        "aria-level": ariaHeadingLevel,
        role: isHeading ? 'heading' : undefined
      }, rest), children);
    });
  };
};

export { typographyRootCompose };
