'use strict';

var is = require('./is.js');

const onRE = /^on[^a-z]/;
const isOn = (key) => onRE.test(key);
const cacheStringFunction = (fn) => {
  const cache = /* @__PURE__ */ Object.create(null);
  return (str) => {
    const hit = cache[str];
    return hit || (cache[str] = fn(str));
  };
};
const camelizeRE = /-(\w)/g;
const camelize = cacheStringFunction((str) => {
  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
});
const hyphenateRE = /\B([A-Z])/g;
const hyphenate = cacheStringFunction((str) => {
  return str.replace(hyphenateRE, "-$1").toLowerCase();
});
const capitalize = cacheStringFunction((str) => {
  return str.charAt(0).toUpperCase() + str.slice(1);
});
const hasOwnProperty = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty.call(val, key);
function resolvePropValue(options, props, key, value) {
  const opt = options[key];
  if (opt != null) {
    const hasDefault = hasOwn(opt, "default");
    if (hasDefault && value === void 0) {
      const defaultValue = opt.default;
      value = opt.type !== Function && is.isFunction(defaultValue) ? defaultValue() : defaultValue;
    }
    if (opt.type === Boolean) {
      if (!hasOwn(props, key) && !hasDefault)
        value = false;
      else if (value === "")
        value = true;
    }
  }
  return value;
}
function getDataAndAriaProps(props) {
  return Object.keys(props).reduce((memo, key) => {
    if (key.startsWith("data-") || key.startsWith("aria-"))
      memo[key] = props[key];
    return memo;
  }, {});
}
function toPx(val) {
  if (typeof val === "number")
    return `${val}px`;
  return val;
}
function renderHelper(v, props = {}, defaultV) {
  if (typeof v === "function")
    return v(props);
  return v != null ? v : defaultV;
}
function wrapPromiseFn(openFn) {
  let closeFn;
  const closePromise = new Promise((resolve) => {
    closeFn = openFn(() => {
      resolve(true);
    });
  });
  const result = () => {
    closeFn == null ? void 0 : closeFn();
  };
  result.then = (filled, rejected) => closePromise.then(filled, rejected);
  result.promise = closePromise;
  return result;
}
function toArray(value) {
  if (value === void 0 || value === null)
    return [];
  return Array.isArray(value) ? value : [value];
}

exports.cacheStringFunction = cacheStringFunction;
exports.camelize = camelize;
exports.capitalize = capitalize;
exports.getDataAndAriaProps = getDataAndAriaProps;
exports.hyphenate = hyphenate;
exports.isOn = isOn;
exports.renderHelper = renderHelper;
exports.resolvePropValue = resolvePropValue;
exports.toArray = toArray;
exports.toPx = toPx;
exports.wrapPromiseFn = wrapPromiseFn;
//# sourceMappingURL=util.js.map
