text: "use strict";
  Object.defineProperty(exports, "__esModule", { value: true });
  exports.css = void 0;
  var utils_js_1 = require("../utils.js");
  /**
   * Set multiple CSS properties for every matched element.
   *
   * @category CSS
   * @param prop - The names of the properties.
   * @param val - The new values.
   * @returns The instance itself.
   * @see {@link https://api.jquery.com/css/}
   */
  function css(prop, val) {
      if ((prop != null && val != null) ||
          // When `prop` is a "plain" object
          (typeof prop === 'object' && !Array.isArray(prop))) {
          return (0, utils_js_1.domEach)(this, function (el, i) {
              if ((0, utils_js_1.isTag)(el)) {
                  // `prop` can't be an array here anymore.
                  setCss(el, prop, val, i);
              }
          });
      }
      if (this.length === 0) {
          return undefined;
      }
      return getCss(this[0], prop);
  }
  exports.css = css;
  /**
   * Set styles of all elements.
   *
   * @private
   * @param el - Element to set style of.
   * @param prop - Name of property.
   * @param value - Value to set property to.
   * @param idx - Optional index within the selection.
   */
  function setCss(el, prop, value, idx) {
      if (typeof prop === 'string') {
          var styles = getCss(el);
          var val = typeof value === 'function' ? value.call(el, idx, styles[prop]) : value;
          if (val === '') {
              delete styles[prop];
          }
          else if (val != null) {
              styles[prop] = val;
          }
          el.attribs['style'] = stringify(styles);
      }
      else if (typeof prop === 'object') {
          Object.keys(prop).forEach(function (k, i) {
              setCss(el, k, prop[k], i);
          });
      }
  }
  function getCss(el, prop) {
      if (!el || !(0, utils_js_1.isTag)(el))
          return;
      var styles = parse(el.attribs['style']);
      if (typeof prop === 'string') {
          return styles[prop];
      }
      if (Array.isArray(prop)) {
          var newStyles_1 = {};
          prop.forEach(function (item) {
              if (styles[item] != null) {
                  newStyles_1[item] = styles[item];
              }
          });
          return newStyles_1;
      }
      return styles;
  }
  /**
   * Stringify `obj` to styles.
   *
   * @private
   * @category CSS
   * @param obj - Object to stringify.
   * @returns The serialized styles.
   */
  function stringify(obj) {
      return Object.keys(obj).reduce(function (str, prop) { return "".concat(str).concat(str ? ' ' : '').concat(prop, ": ").concat(obj[prop], ";"); }, '');
  }
  /**
   * Parse `styles`.
   *
   * @private
   * @category CSS
   * @param styles - Styles to be parsed.
   * @returns The parsed styles.
   */
  function parse(styles) {
      styles = (styles || '').trim();
      if (!styles)
          return {};
      var obj = {};
      var key;
      for (var _i = 0, _a = styles.split(';'); _i < _a.length; _i++) {
          var str = _a[_i];
          var n = str.indexOf(':');
          // If there is no :, or if it is the first/last character, add to the previous item's value
          if (n < 1 || n === str.length - 1) {
              var trimmed = str.trimEnd();
              if (trimmed.length > 0 && key !== undefined) {
                  obj[key] += ";".concat(trimmed);
              }
          }
          else {
              key = str.slice(0, n).trim();
              obj[key] = str.slice(n + 1).trim();
          }
      }
      return obj;
  }
  //# sourceMappingURL=css.js.map