import React, { createContext, forwardRef, useContext, useMemo, useState as useState$1, useRef, useEffect } from 'react';
import hoistStatics from 'hoist-non-react-statics';
import NodeKey from 'react-node-key';
import ReactDOM from 'react-dom';

function _arrayLikeToArray(r, a) {
  (null == a || a > r.length) && (a = r.length);
  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
  return n;
}
function _arrayWithHoles(r) {
  if (Array.isArray(r)) return r;
}
function asyncGeneratorStep(n, t, e, r, o, a, c) {
  try {
    var i = n[a](c),
      u = i.value;
  } catch (n) {
    return void e(n);
  }
  i.done ? t(u) : Promise.resolve(u).then(r, o);
}
function _asyncToGenerator(n) {
  return function () {
    var t = this,
      e = arguments;
    return new Promise(function (r, o) {
      var a = n.apply(t, e);
      function _next(n) {
        asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
      }
      function _throw(n) {
        asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
      }
      _next(void 0);
    });
  };
}
function _defineProperty(e, r, t) {
  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
    value: t,
    enumerable: !0,
    configurable: !0,
    writable: !0
  }) : e[r] = t, e;
}
function _extends() {
  return _extends = Object.assign ? Object.assign.bind() : function (n) {
    for (var e = 1; e < arguments.length; e++) {
      var t = arguments[e];
      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
    }
    return n;
  }, _extends.apply(null, arguments);
}
function _iterableToArrayLimit(r, l) {
  var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
  if (null != t) {
    var e,
      n,
      i,
      u,
      a = [],
      f = !0,
      o = !1;
    try {
      if (i = (t = t.call(r)).next, 0 === l) {
        if (Object(t) !== t) return;
        f = !1;
      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
    } catch (r) {
      o = !0, n = r;
    } finally {
      try {
        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
      } finally {
        if (o) throw n;
      }
    }
    return a;
  }
}
function _nonIterableRest() {
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function ownKeys(e, r) {
  var t = Object.keys(e);
  if (Object.getOwnPropertySymbols) {
    var o = Object.getOwnPropertySymbols(e);
    r && (o = o.filter(function (r) {
      return Object.getOwnPropertyDescriptor(e, r).enumerable;
    })), t.push.apply(t, o);
  }
  return t;
}
function _objectSpread2(e) {
  for (var r = 1; r < arguments.length; r++) {
    var t = null != arguments[r] ? arguments[r] : {};
    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
      _defineProperty(e, r, t[r]);
    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
    });
  }
  return e;
}
function _objectWithoutProperties(e, t) {
  if (null == e) return {};
  var o,
    r,
    i = _objectWithoutPropertiesLoose(e, t);
  if (Object.getOwnPropertySymbols) {
    var n = Object.getOwnPropertySymbols(e);
    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
  }
  return i;
}
function _objectWithoutPropertiesLoose(r, e) {
  if (null == r) return {};
  var t = {};
  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
    if (-1 !== e.indexOf(n)) continue;
    t[n] = r[n];
  }
  return t;
}
function _regenerator() {
  /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
  var e,
    t,
    r = "function" == typeof Symbol ? Symbol : {},
    n = r.iterator || "@@iterator",
    o = r.toStringTag || "@@toStringTag";
  function i(r, n, o, i) {
    var c = n && n.prototype instanceof Generator ? n : Generator,
      u = Object.create(c.prototype);
    return _regeneratorDefine(u, "_invoke", function (r, n, o) {
      var i,
        c,
        u,
        f = 0,
        p = o || [],
        y = !1,
        G = {
          p: 0,
          n: 0,
          v: e,
          a: d,
          f: d.bind(e, 4),
          d: function (t, r) {
            return i = t, c = 0, u = e, G.n = r, a;
          }
        };
      function d(r, n) {
        for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) {
          var o,
            i = p[t],
            d = G.p,
            l = i[2];
          r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0));
        }
        if (o || r > 1) return a;
        throw y = !0, n;
      }
      return function (o, p, l) {
        if (f > 1) throw TypeError("Generator is already running");
        for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) {
          i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u);
          try {
            if (f = 2, i) {
              if (c || (o = "next"), t = i[o]) {
                if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object");
                if (!t.done) return t;
                u = t.value, c < 2 && (c = 0);
              } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1);
              i = e;
            } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break;
          } catch (t) {
            i = e, c = 1, u = t;
          } finally {
            f = 1;
          }
        }
        return {
          value: t,
          done: y
        };
      };
    }(r, o, i), !0), u;
  }
  var a = {};
  function Generator() {}
  function GeneratorFunction() {}
  function GeneratorFunctionPrototype() {}
  t = Object.getPrototypeOf;
  var c = [][n] ? t(t([][n]())) : (_regeneratorDefine(t = {}, n, function () {
      return this;
    }), t),
    u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c);
  function f(e) {
    return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e;
  }
  return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine(u), _regeneratorDefine(u, o, "Generator"), _regeneratorDefine(u, n, function () {
    return this;
  }), _regeneratorDefine(u, "toString", function () {
    return "[object Generator]";
  }), (_regenerator = function () {
    return {
      w: i,
      m: f
    };
  })();
}
function _regeneratorDefine(e, r, n, t) {
  var i = Object.defineProperty;
  try {
    i({}, "", {});
  } catch (e) {
    i = 0;
  }
  _regeneratorDefine = function (e, r, n, t) {
    function o(r, n) {
      _regeneratorDefine(e, r, function (e) {
        return this._invoke(r, n, e);
      });
    }
    r ? i ? i(e, r, {
      value: n,
      enumerable: !t,
      configurable: !t,
      writable: !t
    }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2));
  }, _regeneratorDefine(e, r, n, t);
}
function _slicedToArray(r, e) {
  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
}
function _toPrimitive(t, r) {
  if ("object" != typeof t || !t) return t;
  var e = t[Symbol.toPrimitive];
  if (void 0 !== e) {
    var i = e.call(t, r || "default");
    if ("object" != typeof i) return i;
    throw new TypeError("@@toPrimitive must return a primitive value.");
  }
  return ("string" === r ? String : Number)(t);
}
function _toPropertyKey(t) {
  var i = _toPrimitive(t, "string");
  return "symbol" == typeof i ? i : i + "";
}
function _unsupportedIterableToArray(r, a) {
  if (r) {
    if ("string" == typeof r) return _arrayLikeToArray(r, a);
    var t = {}.toString.call(r).slice(8, -1);
    return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
  }
}

// 值类型判断 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var isUndefined = function isUndefined(val) {
  return typeof val === 'undefined';
};
var isNull = function isNull(val) {
  return val === null;
};
var isFunction = function isFunction(val) {
  return typeof val === 'function';
};
var isString = function isString(val) {
  return typeof val === 'string';
};
var isExist = function isExist(val) {
  return !(isUndefined(val) || isNull(val));
};
var isNaN = function isNaN(val) {
  return isFunction(Number.isNaN) ? Number.isNaN(val) : val !== val;
}; // eslint-disable-line

var isNumber = function isNumber(val) {
  return typeof val === 'number' && !isNaN(val);
};
var isPromiseLike = function isPromiseLike(val) {
  return isExist(val) && isFunction(val.then);
};
// 值类型判断 -------------------------------------------------------------

var get = function get(obj) {
  var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  var defaultValue = arguments.length > 2 ? arguments[2] : undefined;
  try {
    if (isNumber(keys)) {
      keys = String(keys);
    }
    var result = (isString(keys) ? keys.split('.') : keys).reduce(function (res, key) {
      return res[key];
    }, obj);
    return isUndefined(result) ? defaultValue : result;
  } catch (e) {
    return defaultValue;
  }
};
var run = function run(obj) {
  var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  keys = isString(keys) ? keys.split('.') : keys;
  var func = get(obj, keys);
  var context = get(obj, keys.slice(0, -1));
  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
    args[_key - 2] = arguments[_key];
  }
  return isFunction(func) ? func.call.apply(func, [context].concat(args)) : func;
};

var delay = function delay(time) {
  return new Promise(function (resolve) {
    return setTimeout(resolve, time);
  });
};

/**
 * [防抖]
 * @param {Function} func 执行函数
 * @param {Number} wait 多少毫秒后运行一次
 */
var debounce = function debounce(func) {
  var wait = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;
  var timeout;
  return function () {
    var _this = this;
    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }
    clearTimeout(timeout);
    timeout = setTimeout(function () {
      func.apply(_this, args);
    }, wait);
    return timeout;
  };
};

/**
 * [用来智能处理Promise类型返回值]
 * 当值生成过程为 promise 时，将得到 promise 类型返回值，按约定 resolve 最终值
 * 当过程不为 promise 时将直接得到值
 * @param {Function} executor 执行过程获取
 * @param {Function} valuer 值处理过程
 */
var promiseGuess = function promiseGuess(executor, valuer) {
  return function () {
    var _this2 = this;
    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
      args[_key2] = arguments[_key2];
    }
    var value = executor.apply(this, args);
    return isPromiseLike(value) ? new Promise(function (resolve) {
      return value.then(function (value) {
        return resolve(valuer.call.apply(valuer, [_this2, null, value].concat(args)));
      })["catch"](function (err) {
        return resolve(valuer.call.apply(valuer, [_this2, err, undefined].concat(args)));
      });
    }) : valuer.call.apply(valuer, [this, null, value].concat(args));
  };
};

var _excluded = ["forwardRef", "__key"];
var _filehash = "mj54";
var context = createContext();
var Provider = context.Provider;
function withSanti(Component) {
  function WrappedComponent(_ref) {
    var forwardRef = _ref.forwardRef,
      nodeKey = _ref.__key,
      props = _objectWithoutProperties(_ref, _excluded);
    var count = 0;
    var contextValue = useMemo(function () {
      return {
        nodeKey: nodeKey,
        getCountedKey: function getCountedKey() {
          return nodeKey ? "".concat(nodeKey, ":").concat(count++) : undefined;
        }
      };
    }, [nodeKey]);
    return /*#__PURE__*/React.createElement(Provider, {
      value: contextValue,
      _nk: "".concat(_filehash, "11")
    }, /*#__PURE__*/React.createElement(Component, _extends({}, props, {
      ref: forwardRef,
      _nk: "".concat(_filehash, "21")
    })));
  }
  var ForwardedRefHOC = forwardRef(function (props, ref) {
    return /*#__PURE__*/React.createElement(NodeKey, {
      _nk: "".concat(_filehash, "31")
    }, function (nodeKey) {
      return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {
        forwardedRef: ref,
        __key: nodeKey,
        _nk: "".concat(_filehash, "41")
      }));
    });
  });
  return hoistStatics(ForwardedRefHOC, WrappedComponent);
}
function useNodeKey() {
  return useContext(context) || {
    nodeKey: undefined,
    getCountedKey: function getCountedKey() {
      return undefined;
    }
  };
}
function useSID() {
  var _useNodeKey = useNodeKey(),
    sid = _useNodeKey.nodeKey,
    getCountedSID = _useNodeKey.getCountedKey;
  return {
    sid: sid,
    getCountedSID: getCountedSID
  };
}

var KEY = '__SSRDATA__';
function inject() {
  var script = document.getElementById(KEY) || document.createElement('script');
  script.id = KEY;
  script.innerHTML = "window.".concat(KEY, "={};");
  document.head.appendChild(script);
}
function bootstrap() {
  if (window.__SSR__) {
    inject();
  } else {
    if (isExist(document.getElementById(KEY))) {
      window.__SSRED__ = true;
    }
  }
  var data = window[KEY] || {};
  function remove(key) {
    delete data[key];
  }
  function set(key, value) {
    if (!window.__SSR__) {
      return;
    }
    data[key] = value;
    document.getElementById(KEY).innerHTML = "window.".concat(KEY, "=").concat(JSON.stringify(data), ";");
  }
  function get(key) {
    var value = data[key];
    remove(key); // 初始值只在 html 就绪后使用一次，使用即销毁
    return value;
  }
  return {
    set: set,
    get: get,
    remove: remove
  };
}
var store = bootstrap();
var store$1 = {
  get: promiseGuess(function (key, builder) {
    if (!key && window.__SSR__) {
      // 若无 key 则 SSR 阶段不计算
      return undefined;
    }
    var value;
    if (!window.__SSR__) {
      value = store.get(key);
    }
    if (isUndefined(value)) {
      value = run(builder);
    }
    return value;
  }, function (err, value, key) {
    if (!key) {
      return [null, value];
    }
    if (err) {
      store.remove(key);
      return [err, undefined];
    }
    if (window.__SSR__) {
      store.set(key, value);
    }
    return [null, value];
  }),
  set: store.set
};

var warningMissingKey = debounce(function () {
  if (window.__SSR__) {
    return;
  }
  console.warn('You shouldn\'t use "santi.useState" outside a "withSanti"');
}, 32);
function useState(initialState, key) {
  var _useNodeKey = useNodeKey(),
    getCountedKey = _useNodeKey.getCountedKey;
  var nodeKey = key || run(getCountedKey);
  var _useReactState = useState$1(function () {
      if (!nodeKey) {
        warningMissingKey();
      }
      var _store$get = store$1.get(nodeKey, initialState),
        _store$get2 = _slicedToArray(_store$get, 2),
        err = _store$get2[0],
        value = _store$get2[1];
      if (err) {
        console.error(err);
      }
      return value;
    }),
    _useReactState2 = _slicedToArray(_useReactState, 2),
    state = _useReactState2[0],
    setState = _useReactState2[1];
  return [state, function (getNextState) {
    var nextState = run(getNextState, undefined, state);
    store$1.set(nodeKey, nextState);
    return setState(nextState);
  }, nodeKey];
}

var _excluded$1 = ["forwardedRef"];
var _filehash$1 = "DQeO";
var getInitialProps = function getInitialProps(fetch) {
  var fallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
  var key = arguments.length > 2 ? arguments[2] : undefined;
  return function (Component) {
    function WrappedComponent(_ref) {
      var forwardedRef = _ref.forwardedRef,
        props = _objectWithoutProperties(_ref, _excluded$1);
      var _useState = useState$1(false),
        _useState2 = _slicedToArray(_useState, 2),
        ready = _useState2[0],
        setReady = _useState2[1];
      var _useState3 = useState$1({}),
        _useState4 = _slicedToArray(_useState3, 2),
        ssrProps = _useState4[0],
        setSsrProps = _useState4[1];
      var mounted = useRef(true);
      var _useNodeKey = useNodeKey(),
        getCountedKey = _useNodeKey.getCountedKey;
      var nodeKey = key || run(getCountedKey);
      useEffect(function () {
        function init() {
          return _init.apply(this, arguments);
        }
        function _init() {
          _init = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
            var _yield$store$get, _yield$store$get2, err, ssrProps;
            return _regenerator().w(function (_context) {
              while (1) switch (_context.n) {
                case 0:
                  _context.n = 1;
                  return store$1.get(nodeKey, function () {
                    return run(fetch, undefined, props);
                  });
                case 1:
                  _yield$store$get = _context.v;
                  _yield$store$get2 = _slicedToArray(_yield$store$get, 2);
                  err = _yield$store$get2[0];
                  ssrProps = _yield$store$get2[1];
                  if (!err) {
                    _context.n = 2;
                    break;
                  }
                  console.error('[getInitialProps error]', err);
                  return _context.a(2);
                case 2:
                  if (mounted.current && ssrProps) {
                    setSsrProps(ssrProps);
                    setReady(true);
                  }
                case 3:
                  return _context.a(2);
              }
            }, _callee);
          }));
          return _init.apply(this, arguments);
        }
        init();
        return function () {
          mounted.current = false;
        };
      }, []);
      return ready ? /*#__PURE__*/React.createElement(Component, _extends({}, _objectSpread2(_objectSpread2({}, props), ssrProps), {
        ref: forwardedRef,
        _nk: "".concat(_filehash$1, "11")
      })) : run(fallback, undefined, props);
    }
    var ForwardedRefHOC = forwardRef(function (props, ref) {
      return /*#__PURE__*/React.createElement(WrappedComponent, _extends({}, props, {
        forwardedRef: ref,
        _nk: "".concat(_filehash$1, "21")
      }));
    });
    return withSanti(hoistStatics(ForwardedRefHOC, WrappedComponent));
  };
};

var ready = /*#__PURE__*/function () {
  var _ref = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
    var delayMillisecond,
      script,
      _args = arguments;
    return _regenerator().w(function (_context) {
      while (1) switch (_context.p = _context.n) {
        case 0:
          delayMillisecond = _args.length > 0 && _args[0] !== undefined ? _args[0] : -1;
          _context.p = 1;
          if (!(delayMillisecond && Number(delayMillisecond) >= 0)) {
            _context.n = 2;
            break;
          }
          _context.n = 2;
          return delay(delayMillisecond);
        case 2:
          if (window.__SSR__ && !window.__SSRREADY__) {
            script = document.createElement('script');
            script.innerHTML = 'window.__SSRREADY__=true';
            document.head.appendChild(script);
          }
          // ssr 阶段：通知 santi 可以采集页面内容
          // csr 阶段：通知 santi/render 已完成呈现
          document.dispatchEvent(new Event('ssr-ready'));
        case 3:
          _context.p = 3;
          return _context.f(3);
        case 4:
          return _context.a(2);
      }
    }, _callee, null, [[1,, 3, 4]]);
  }));
  return function ready() {
    return _ref.apply(this, arguments);
  };
}();

var Container = withSanti(function (_ref) {
  var children = _ref.children;
  return children;
});

var _filehash$2 = "q8Vs";
var ROOT_KEY = 'ssr-root';
function render(content, container, callback) {
  var element = /*#__PURE__*/React.createElement(Container, {
    _nk: "".concat(_filehash$2, "11")
  }, content);

  // 支持热加载
  // FIXME: Dev 阶段会导致渲染抖动
  if (module.hot) {
    return ReactDOM.render(element, container, callback);
  }

  // ssr 阶段将内容渲染至动态生成的 ssr-root 节点中
  if (window.__SSR__) {
    var ssrRoot = document.getElementById(ROOT_KEY);
    if (!ssrRoot) {
      ssrRoot = document.createElement('div');
      ssrRoot.style.cssText = 'width:100%;height:100%;';
      ssrRoot.id = ROOT_KEY;
      document.body.insertBefore(ssrRoot, container);
    }
    return ReactDOM.render(element, ssrRoot, callback);
  }

  // csr 阶段若为 ssr 渲染结果，则在 csr 完成后替换 ssr 结果
  // 注：不使用水合操作（ReactDOM.hydrate）因为可能造成节点错误问题
  if (window.__SSRED__) {
    var display = function display() {
      // 做一定延时，尽可能保证平滑呈现
      setTimeout(function () {
        var ssrRoot = document.getElementById(ROOT_KEY);
        if (ssrRoot) {
          try {
            ssrRoot.parentNode.removeChild(ssrRoot);
          } finally {
            // nothing
          }
        }
        container.style.display = '';
      }, 56);
    }; // 若为快照 ssr 则 csr 阶段将同样收到 ssr-ready 事件，在此事件后平滑呈现真实可用交互
    var _ssrRoot = document.getElementById(ROOT_KEY);
    var renderCallback = callback;
    container.style.display = 'none';
    container.innerHTML = _ssrRoot.innerHTML;
    if (window.__SSRREADY__) {
      var _onReady = function onReady() {
        display();
        document.removeEventListener('ssr-ready', _onReady);
      };
      document.addEventListener('ssr-ready', _onReady);
    } else {
      // 若不为快照 ssr（一般为超时自动快照），则在 render 回调结束后呈现真实结果
      renderCallback = function renderCallback() {
        // FIXME: 超时快照可能造成呈现不平滑，具体表现为 SSR 切到真实内容过程中有轻微空屏现象，通俗为 “闪一下”，此问题待完美修正
        display();
        if (isFunction(callback)) {
          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
            args[_key] = arguments[_key];
          }
          callback.apply(this, args);
        }
      };
    }
    return ReactDOM.render(element, container, renderCallback);
  }

  // csr 若不为 ssr 渲染结果则正常渲染
  return ReactDOM.render(element, container, callback);
}

var _filehash$3 = "YwT1";
function Ready(_ref) {
  var children = _ref.children,
    delay = _ref.delay,
    _ref$onMount = _ref.onMount,
    onMount = _ref$onMount === void 0 ? false : _ref$onMount,
    _ref$when = _ref.when,
    when = _ref$when === void 0 ? false : _ref$when;
  useEffect(function () {
    if (onMount) {
      ready(delay);
    }
  }, []);
  useEffect(function () {
    if (when) {
      ready(delay);
    }
  }, [when]);
  return children;
}
function ReadyOnMount(_ref2) {
  var children = _ref2.children,
    delay = _ref2.delay;
  var _useState = useState$1(false),
    _useState2 = _slicedToArray(_useState, 2),
    ready = _useState2[0],
    setReady = _useState2[1];
  useEffect(function () {
    setReady(true);
  }, []);
  return /*#__PURE__*/React.createElement(Ready, {
    delay: delay,
    when: ready,
    _nk: "".concat(_filehash$3, "11")
  }, children);
}
Ready.OnMount = ReadyOnMount;

function NoSSR(_ref) {
  var children = _ref.children,
    _ref$fallback = _ref.fallback,
    fallback = _ref$fallback === void 0 ? null : _ref$fallback;
  return window.__SSR__ ? run(fallback) : children;
}

var index = {
  render: render,
  store: store$1,
  useState: useState,
  getInitialProps: getInitialProps,
  ready: ready,
  withSanti: withSanti,
  useNodeKey: useNodeKey,
  useSID: useSID,
  Ready: Ready,
  NoSSR: NoSSR
};

export default index;
export { NoSSR, Ready, getInitialProps, ready, render, store$1 as store, useNodeKey, useSID, useState, withSanti };
